DIR = "$ (cd" $(dirname "$ {BASH_SOURCE [0]}" ) "&& pwd)" Как это работает?
Мне нужно получить путь к script. Я могу сделать это с помощью pwd, если я уже в том же каталоге, я искал в Интернете, и я нашел это
DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
Но я не использую это.
Ответ 1
Bash поддерживает ряд переменных, включая BASH_SOURCE, который является массивом путей к исходным файлам.
${} действует как своего рода цитирование для переменных.
$() действует как своего рода цитирование для команд, но они запускаются в их собственном контексте.
dirname предоставляет вам часть пути предоставленного аргумента.
cd изменяет текущий каталог.
pwd указывает текущий путь.
&& является логическим and, но используется в этом случае для его побочного эффекта запуска команд один за другим.
Таким образом, эта команда получает путь к исходному файлу script, разделяет его только на часть пути, cd на этот путь, а затем использует pwd для возврата (эффективного) полного пути к script, Это присваивается DIR. После этого контекст разматывается, и вы вернетесь в каталог, в котором вы начали, но с переменной окружения DIR, содержащей путь script.