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
を呼び出したときにそれを返すコマンドを格納しますが、文字列変数をそこに格納したいと考えています。どうやってするか?
PWDは環境変数であり、ディレクトリを変更すると変更されます。
変数に別の名前を使用し、
例えば:
MYPWD=${PWD} #or MYPWD=$(pwd)
cd /etc/nginx/sites-enabled/
cd $MYPWD
試してください:
PWD=`pwd`
または:
PWD=$(pwd)
どちらの式もpwdコマンドを実行し、コマンド出力をシェル変数PWDに格納します。各スタイルをいつ使用するかについては、Webで多くの議論があります。私が覚えている1つの点は、 "$(cmd)"アプローチはコマンドのネストを可能にすることです。
CURRENT_BASENAME=$(basename $(pwd))
編集-PWDは常に現在の作業ディレクトリに展開される組み込みのShell変数であることに気づきました。
cd -
も役立つかもしれません