Как указать текущее местоположение командного файла (.command) в Mac OS X

Как указать текущее местоположение командного файла (.command) в Mac OS X

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

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

решение1

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

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

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

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

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
}

Связанный контент