Определите путь выполнения BASH script
Возможный дубликат:
Может ли Bash script указать, в каком каталоге он хранится?
В команде Windows script можно определить путь к каталогу текущего выполняющегося script с помощью %~dp0
. Например:
@echo Running from %~dp0
Что было бы эквивалентно в BASH script?
Ответы
Ответ 1
Для относительного пути (т.е. прямого эквивалента Windows '%~dp0
):
MY_PATH="`dirname \"$0\"`"
echo "$MY_PATH"
Для абсолютного, нормализованного пути:
MY_PATH="`dirname \"$0\"`" # relative
MY_PATH="`( cd \"$MY_PATH\" && pwd )`" # absolutized and normalized
if [ -z "$MY_PATH" ] ; then
# error; for some reason, the path is not accessible
# to the script (e.g. permissions re-evaled after suid)
exit 1 # fail
fi
echo "$MY_PATH"
Ответ 2
Предполагая, что вы вводите полный путь к bash script, используйте $0
и dirname
, например:
#!/bin/bash
echo "$0"
dirname "$0"
Пример вывода:
$ /a/b/c/myScript.bash
/a/b/c/myScript.bash
/a/b/c
При необходимости добавьте результаты переменной $PWD
в относительный путь.
EDIT: добавлены кавычки для обработки символов пробела.
Ответ 3
Добавил Стефан ЧАЗЕЛАС на c.u.s.
Предполагая оболочку POSIX:
prg=$0
if [ ! -e "$prg" ]; then
case $prg in
(*/*) exit 1;;
(*) prg=$(command -v -- "$prg") || exit;;
esac
fi
dir=$(
cd -P -- "$(dirname -- "$prg")" && pwd -P
) || exit
prg=$dir/$(basename -- "$prg") || exit
printf '%s\n' "$prg"
Ответ 4
echo Running from `dirname $0`
Ответ 5
Код Влада перевыполнен. Должно быть:
MY_PATH=`dirname "$0"`
MY_PATH=`( cd "$MY_PATH" && pwd )`