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 - это встроенная переменная оболочки, которая всегда расширяется до текущего рабочего каталога.

Вы также можете найти cd -полезный

Другие вопросы по тегам