Извините, если это глупый вопрос, но я безуспешно искал его.
Что именно делает вторая строка?
#!/bin/sh
cd ${0%/*} || exit 1
Я знаю, что первый - это шебанг, второй пытается сменить каталог, но сбивает с толку ${0%/*}
.
Не могли бы вы объяснить мне эту вторую строку?
command-line
sh
Navaro
источник
источник
dirname
команду как$(dirname $0)
dirname
встроена? Это, конечно, не в Bash v4.3.11, который является оболочкой по умолчанию в Ubuntu Trusty.dirname
это не встроенная оболочка.Ответы:
${0}
это первый аргумент скрипта, то есть имя скрипта или путь. Если запустить сценарий какpath/to/script.sh
, то${0}
будет именно эта строка:path/to/script.sh
.%/*
Часть изменяет значение${0}
. Это означает: взять все символы, пока не/
последует имя файла. В приведенном выше примере${0%/*}
будетpath/to
.Вы можете увидеть это в действии на вашей оболочке:
Sh поддерживает много других видов «подстановки параметров». Вот, например, как взять имя файла вместо пути:
В общем,
%
и%%
полосовые суффиксы, а#
и##
полосовые префиксы. Вы можете прочитать больше о замене параметров .источник
|| exit 1
возможно, это потребуется, посколькуcd
при ошибке может завершиться со статусом 2, а не 1. Однако я согласен, что это не очень полезно (обычно программы не заботятся о конкретных статусах выхода). Возможно, это часть более крупного сценария?