При написании сценария bash, как мне получить абсолютный путь к местоположению текущего файла?

Предположим, у меня есть файл bash с именем myBash.bash. Он находится в:

/myDirect/myFolder/myBash.bash

Теперь я хочу использовать строку /myDirect/myFolder (расположение myBash.bash) внутри скрипта. Есть ли команда, которую я могу использовать, чтобы найти это местоположение?

Изменить: Идея состоит в том, что я хочу настроить zip-папку с кодом, который может быть запущен скриптом bash внутри этого zip-файла , Я знаю относительные пути к файлу кода внутри этого zip-файла, но не абсолютные пути, и мне нужны эти. Один из способов заключается в жестком коде в пути или требует указания пути файла в качестве переменной. Однако мне было бы легче, если бы bash-файл мог определить, где он сам по себе, а затем создать соответствующие пути к другому файлу из его знаний о структуре zip-файла.

1
задан 17 March 2017 в 13:44

2 ответа

, если скрипт находится на вашем пути, вы можете использовать что-то вроде

$ myloc=$(dirname "$(which foo.sh)")
$ echo "$myloc"
/path/to/foo.sh

EDIT: после чтения комментариев от Serg это может быть общее решение, которое работает независимо от того, находится ли скрипт на вашем пути или нет .

myloc==$(dirname "$(realpath $0)")
dirname "$myloc"
4
ответ дан 23 May 2018 в 00:33
  • 1
    which более подходит для того, когда скрипт находится в одной из каталогов, входящих в переменную PATH. Используйте $0 из сценария, как показывает Занна. Но ваш ответ правильный, потому что вы используете dirname вместо того, чтобы возиться с sed, поэтому +1 для этого – Sergiy Kolodyazhnyy 17 March 2017 в 13:38

Принятый ответ кажется идеальным. Вот еще один способ сделать это:

cd "$(dirname "$0")"
/bin/pwd

/bin/pwd печатает реальный путь к каталогу, в отличие от встроенной команды pwd.

3
ответ дан 23 May 2018 в 00:33

Другие вопросы по тегам:

Похожие вопросы: