web-dev-qa-db-ja.com

pwdによるbashスクリプトのぎこちなさ

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は、現在のディレクトリを計算し、$PWDを呼び出したときにそれを返すコマンドを格納しますが、文字列変数をそこに格納したいと考えています。どうやってするか?

13

PWDは環境変数であり、ディレクトリを変更すると変更されます。

変数に別の名前を使用し、

例えば:

MYPWD=${PWD}  #or MYPWD=$(pwd)
cd /etc/nginx/sites-enabled/
cd $MYPWD
34
Toam

試してください:

PWD=`pwd`

または:

PWD=$(pwd)

どちらの式もpwdコマンドを実行し、コマンド出力をシェル変数PWDに格納します。各スタイルをいつ使用するかについては、Webで多くの議論があります。私が覚えている1つの点は、 "$(cmd)"アプローチはコマンドのネストを可能にすることです。

CURRENT_BASENAME=$(basename $(pwd))  

編集-PWDは常に現在の作業ディレクトリに展開される組み込みのShell変数であることに気づきました。

3
EJK

cd -も役立つかもしれません

0
Brian Kuhns