2

У меня есть командный файл (.command), который я дважды щелкаю, чтобы сделать работу. У него есть зависимости от файлов в той же папке, но если я дважды щелкну по файлу .command, он просто запустится и предположит, что текущее местоположение - /~

Как мне найти / указать расположение файла .command в самом скрипте, чтобы я мог ссылаться на относительные ресурсы?

1 ответ1

3

Если вы используете bash (т.е. скрипт начинается с #!/bin/bash), вы можете использовать $ BASH_SOURCE, чтобы получить имя файла скрипта. Отсюда вы можете получить каталог, в котором он находится:

mydir="$(dirname "$BASH_SOURCE")"

... а затем используйте это для поиска файлов, относящихся к сценарию, например, cp "$mydir/fileInTheSameFolder" /tmp (и, пожалуйста, всегда используйте двойные кавычки вокруг него, как я это сделал здесь)

Обратите внимание, что это может быть относительный путь; например, если скрипт был запущен из интерактивной оболочки с ./scriptname.command , он просто будет выглядеть как «.». Это не должно быть проблемой, если сценарий компакт-диска не находится где-то еще, но если вам нужен полный путь, вы можете использовать его вместо этого:

mydir="$(cd "$(dirname "$BASH_SOURCE")" && pwd)" || {
    echo "Error getting script directory" >&2
    exit 1
}

Или просто cd в каталог скрипта в начале скрипта:

cd "$(dirname "$BASH_SOURCE")" || {
    echo "Error getting script directory" >&2
    exit 1
}

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .