2013-09-24 9 views
7

bash 스크립팅 언어로 작업하는 동안 이상한 문제가 발생했습니다. 여기 가 있습니다 :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 인 어떤 종류의 게으른 - $ PWD 저장 명령, 현재 디렉토리를 계산하고 우리는 $ PWD를 부르는 순간에 그것을 반환합니다. 하지만 문자열 변수를 저장하고 싶습니다. 그렇게하는 방법?

답변

21

PWD는 환경 변수이며 디렉토리를 변경할 때 변경됩니다.

를 사용하여 변수에 대한 다른 이름,

예 :

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

설명서 질문으로 여기에 두십시오. 이 문제를 해결하는 데 약 반 시간. –

+3

다음과 같이 충돌을 피하기 위해 변수에 소문자 (또는 대소 문자가 혼합 된) 이름을 사용하는 것이 좋습니다. –

2

시도 :

PWD=`pwd` 

또는 :

PWD=$(pwd) 

두 표현은 PWD 명령을 실행하고 쉘 변수 PWD의 명령 출력을 저장합니다. 웹에서 각 스타일을 언제 사용할 것인지에 대한 많은 토론이 있습니다. 내가 기억하는 한가지 요점은 "$ (cmd)"접근 방식이 명령의 중첩을 허용한다는 것입니다.

CURRENT_BASENAME=$(basename $(pwd)) 

편집 - PWD는 항상 현재 작업 디렉토리로 확장되는 쉘 변수에 내장되어 있습니다.

+1

아뇨 심하게 농축하고 $ PWD는 것을 언급하지 않았다 - 시스템 변수이며, 항상 현재 디렉토리를 가리키는 . 'HPWD = $ (pwd)'는 정상적으로 작동했습니다. –