echo $0 | sed 's/\(.*\)\/.*/\1/'
возвращает папку, в которой выполняется скрипт.
Например, если вы запускаете скрипт с именем /home/mike/test.sh
, он дает вам /home/mike/
и вся команда превращается в этот каталог.
попробуйте это
echo this is where we started
pwd
cd `echo $0 | sed 's/\(.*\)\/.*/\1/'` # extract pathname
echo now we are here
pwd
А затем запустите скрипт из каталога, отличного от того, в котором он находится.
---- ответь на вопрос ---
sed 's/\(.*\)\/.*/\1/'
удаляет последний фрагмент пути
попробуйте это
echo this/is/a/test | sed 's/\(.*\)\/.*/\1/'
echo this/is/a/test/ | sed 's/\(.*\)\/.*/\1/'
echo this/is/a/test.sh | sed 's/\(.*\)\/.*/\1/'
и так как echo $0
должен дать вам файл (текущий скрипт), все выражение должно дать вам папку, в которой этот скрипт сохранен.
о том, как это работает, смотрите в ответе на тот же вопрос: https://stackoverflow.com/a/50148667/5203563