Bash скрипт неловкости с pwd
У меня странная проблема при работе с bash-скриптом. Вот:
PWD=${pwd}
# several commands
cd /etc/nginx/sites-enabled/
# more commands
cd $PWD
# I expect that I returning to my directory,
# but $PWD contains current dir - /etc/nginx/sites-enabled/
Такое поведение лениво. $PWD
команда store, которая вычисляет текущий каталог и возвращает его в тот момент, когда мы вызываем $PWD
, но я хочу сохранить строковую переменную в нем. Как это сделать?
2 ответа
PWD является переменной среды и изменяется при изменении каталога.
Используйте другое имя для переменной,
например:
MYPWD=${PWD} #or MYPWD=$(pwd)
cd /etc/nginx/sites-enabled/
cd $MYPWD
Пытаться:
PWD=`pwd`
Или же:
PWD=$(pwd)
Оба выражения выполнят команду pwd и сохранят вывод команды в переменной оболочки PWD. В Интернете много дискуссий о том, когда использовать каждый стиль. Я вспоминаю одну вещь: подход "$(cmd)" позволяет вкладывать команды, например
CURRENT_BASENAME=$(basename $(pwd))
Edit - мне только что пришло в голову, что PWD - это встроенная переменная оболочки, которая всегда расширяется до текущего рабочего каталога.