2013-09-24 8 views
7

bashスクリプト言語を使って作業しているときに奇妙な問題が発生しました。ここ が、それは次のとおりです。 - $ PWD店コマンドを、現在のディレクトリを計算し、我々は$ PWDを呼び出した瞬間にそれを返すbashスクリプトawkwardness with pwd

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/ 

このbehaiveourは怠け者のいくつかの種類です。 しかし、私はそれに文字列変数を格納したい。どうやってするか?

答えて

21

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

使用変数に別の名前、

例:

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

ドキュメントの質問としてここに載せてください。この問題を解決するには約1時間半かかります。 –

+3

このような競合を避けるには、変数に小文字(または大/小文字)の名前を使用することをお勧めします。 –

2

試してみてください。

PWD=`pwd` 

または:

PWD=$(pwd) 

両方の式がPWDのコマンドを実行し、シェル変数PWDのコマンドの出力を保存します。各スタイルをいつ使用するかについては、ウェブ上で多くの議論があります。私が思い起こさせる1つのポイントは、 "$(cmd)"アプローチがコマンドのネストを許可するということです。

CURRENT_BASENAME=$(basename $(pwd)) 

編集 - PWDは、常に現在の作業ディレクトリに展開されるシェル変数に組み込まれています。

+1

いいえ、私はひどく濃縮し、$ PWDがいることを、言及しなかった - システム変数で、常に現在のディレクトリを指します。 'HPWD = $(pwd)'はうまく動きました。 –