.sh 파일의“cd-”가 주소를 인쇄하는 이유


4

"cd-"를 사용하여 폴더를 전환합니다. 처럼:

cd /etc/                                                                                                                          
cd -   

하지만 왜 "cd-"가 주소를 인쇄할까요? 주소 인쇄를 중지하려면 어떻게해야합니까?

답변:


13

SUS4는 말합니다 :

피연산자로-를 사용하는 경우 다음 명령과 같습니다.

    cd "$OLDPWD" && pwd

이전 작업 디렉토리로 변경 한 다음 이름을 씁니다.

따라서 동작의 절반을 인쇄하지 않으려면 첫 번째 비트를 직접 수행하십시오.

cd "$OLDPWD"

또는 물결표 확장

cd ~-

당신이 이것을 필요로한다면, pushd/ popd는 이식성이 적은 선택이지만 더 낫습니다.


1
+1, 그것이 왜 그렇게하는지 분명히 설명하기 때문에 왜 다운 다운되었는지 알 수 없습니다 . 수정 방법을 보여주는 비트 추가

던노 또한 추가 ~-, pushd,popd
ormaaj

1

stdout을 다음과 같이 블랙홀로 리디렉션하십시오.

cd - > /dev/null

두 번 작동하기 때문에 이것을 좋아하지 않습니다. 먼저로 pwd리디렉션되는 것 /dev/null입니다. 왜 cd $OLDPWDormaaj가 제안한대로 사용하지 않습니까?
Andreas Florath

더 타이핑하기 때문에? 그리고 그것은 '마법'환경 변수를 사용합니까? 물론 cd -약간의 마법이지만 최소한 기억하기가 더 쉽습니다.
JvO

이 방법은 좋습니다. "이중 작업"이 아니라 출력 만 숨기고 있습니다 (쉘은 문자 그대로 두 명령을 실행하는 데 필요한 모든 단계를 수행 할 필요는 없습니다). 스크립트에서 pushd/ popd를 사용하는 경우 비슷한 방식으로 출력을 숨겨야합니다 .
ormaaj

0

가장 간단한 방법은 사용하지 않는 것입니다. 별도의 쉘에서 명령을 실행하십시오.

(cd /etc/; ... )

이것은 'main'쉘의 현재 작업 디렉토리를 변경하지 않습니다. 여기 OLDPWD에는 많은 cd명령 을 사용할 수 있기 때문에 일반적으로 사용하는 것보다 강력 합니다.

(cd /etc; ... ; cd /tmp; ... )

그것은 비록 다른 의미를 가지고 (특히 ...환경을 바꾸는 경우 ) 추가 프로세스를 만듭니다.
Mat

무엇과 다른 의미론? 완전히 명확하지 않다 IMHO, 무슨 사이에 발생 cd /etc하고 cd -. 환경 변화가 있다면, 당신은 완전히 맞습니다. 추가가있는 경우 cd초 이상 어쩌면이 더 나은 방법입니다.
Andreas Florath

내 말은 그이다 (cd /etc; FOO=bar)cd /etc; FOO=bar; cd -;같은 일을하지 않습니다.
Mat
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.