Быстрый скрипт bash для запуска скрипта в указанной папке? - PullRequest
2 голосов
/ 14 января 2011

Я пытаюсь написать bash-скрипт, который меняет каталог, а затем запускает существующий скрипт в новом рабочем каталоге.

Это то, что у меня есть:

#!/bin/bash
cd /path/to/a/folder
./scriptname

scriptnameэто исполняемый файл, который существует в папке / path / to / a / - и (что и говорить), у меня есть разрешение на запуск этого скрипта.

Однако, когда я запускаю этот умопомрачительно простой скрипт (выше), Я получаю ответ:

имя сценария: Нет такого файла или каталога

Чего мне не хватает ?!Команды работают должным образом при вводе в CLI, поэтому я затрудняюсь объяснить сообщение об ошибке.Как мне это исправить?

Ответы [ 4 ]

4 голосов
/ 14 января 2011

Глядя на ваш скрипт, я думаю, что вы хотите запустить скрипт, который находится в начальной директории. Поскольку вы меняете каталог до его выполнения, он не будет работать.

Я предлагаю следующий модифицированный скрипт:

#!/bin/bash
SCRIPT_DIR=$PWD
cd /path/to/a/folder
$SCRIPT_DIR/scriptname
3 голосов
/ 14 января 2011
cd /path/to/a/folder
pwd
ls
./scriptname

, который покажет вам, что он думает, что делает.

1 голос
/ 14 января 2011

У меня обычно есть что-то подобное в моей полезной директории скриптов:

#!/bin/bash

# Provide usage information if not arguments were supplied
if [[ "$#" -le 0 ]]; then
        echo "Usage: $0 <executable> [<argument>...]" >&2

        exit 1
fi

# Get the executable by removing the last slash and anything before it
X="${1##*/}"

# Get the directory by removing the executable name
D="${1%$X}"

# Check if the directory exists
if [[ -d "$D" ]]; then
        # If it does, cd into it
        cd "$D"
else
        if [[ "$D" ]]; then
                # Complain if a directory was specified, but does not exist
                echo "Directory '$D' does not exist" >&2

                exit 1
        fi
fi

# Check if the executable is, well, executable
if [[ -x "$X" ]]; then
        # Run the executable in its directory with the supplied arguments
        exec ./"$X" "${@:2}"
else
        # Complain if the executable is not a valid
        echo "Executable '$X' does not exist in '$D'" >&2

        exit 1
fi

Использование:

$ cdexec
Usage: /home/archon/bin/cdexec <executable> [<argument>...]
$ cdexec /bin/ls ls
ls
$ cdexec /bin/xxx/ls ls
Directory '/bin/xxx/' does not exist
$ cdexec /ls ls
Executable 'ls' does not exist in '/'
0 голосов
/ 14 января 2011

Одним из источников таких сообщений об ошибках в этих условиях является неработающая символическая ссылка.

Однако вы говорите, что скрипт работает при запуске из командной строки.Я также проверил бы, является ли каталог символической ссылкой, которая делает что-то отличное от того, что вы ожидаете.

Работает ли это, если вы вызываете его в своем скрипте с полным путем вместо использования cd?

#!/bin/bash
/path/to/a/folder/scriptname

Как насчет того, чтобы вызываться таким образом из командной строки?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...