У меня есть пакетный файл (.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
}