Предположим, что мне назвали файл удара myBash.bash
. Это находится в:
/myDirect/myFolder/myBash.bash
Теперь я хочу использовать строку /myDirect/myFolder
(местоположение myBash.bash
) в сценарии. Существует ли команда, которую я могу использовать для нахождения этого местоположения?
Править: Идея состоит в том, что я хочу установить папку zip с кодом, который может быть запущен сценарием удара в том zip-файле. Я знаю относительные пути к файлам кода в том zip-файле, но не полные пути, и мне нужны они. Один путь был бы к твердому коду в пути или потребовал бы, чтобы путь файла был дан как переменная. Однако я нашел бы это легче, если бы для файла удара было возможно выяснить, где это самостоятельно, и затем создайте соответствующие тракты в другой файл от его знания структуры zip-файла.
Можно получить полный путь как:
realpath "$0"
И, как указано Serg можно использовать dirname
разделять имя файла как это
dirname "$(realpath $0)"
или еще лучше предотвратить неловкое заключение в кавычки и разделение слова с трудными именами файлов:
temp=$( realpath "$0" ) && dirname "$temp"
Намного лучше, чем моя более ранняя идея, которая должна была проанализировать его (я знал, будет лучший путь!)
realpath "$0" | sed 's|\(.*\)/.*|\1|'
realpath
возвращает фактический путь файла$0
этот файл (сценарий)s|old|new|
замена old
с new
\(.*\)/
сохраните любые символы прежде /
на потом\1
сохраненная частьесли сценарий находится в Вашем пути, можно использовать что-то как
$ myloc=$(dirname "$(which foo.sh)")
$ echo "$myloc"
/path/to/foo.sh
Править: после чтения комментариев от Serg это могло бы быть универсальным решением, которое работает, является ли сценарий в Вашем пути или нет.
myloc==$(dirname "$(realpath $0)")
dirname "$myloc"
Принятый ответ кажется прекрасным. Вот другой способ сделать это:
cd "$(dirname "$0")"
/bin/pwd
/bin/pwd
печатает реальный путь каталога, в противоположность pwd
встроенная команда.
wdir="$PWD"; [ "$PWD" = "/" ] && wdir=""
case "$0" in
/*) scriptdir="${0}";;
*) scriptdir="$wdir/${0#./}";;
esac
scriptdir="${scriptdir%/*}"
echo "$scriptdir"
Это взято в качестве ссылки от kenorb и andro
Никакой dirname, readlink, realpath, BASH_SOURCE
Все - builtins