답변:
@erewok은 이미 질문에 대답 했지만 실제로 무슨 일이 일어나고 있으며 왜 내 행동이 보이는지 설명 할 것입니다.
문제는 리디렉션에 있습니다. 글 쓰고 있구나:
cd - 2>&1 /dev/null
리디렉션은 명령 줄 내의 어느 위치 에나 나타날 수 있기 때문에 (직접 같은 간단한 것으로 직접 확인할 수 있음 echo a b 2>&1 c </etc/fstab d) 리디렉션이 실제로 제거 된 후에는 다음과 같습니다.
cd - /dev/null
문제가 보입니까? cd하나의 인수와 두 개의 재 지정이 아닌에 두 개의 인수를 전달 하고 있습니다. 한 번에 하나의 현재 디렉토리 cd에만있을 수 있으므로 첫 번째 인수 만 고려합니다 (이 경우에는) -.
아마도 작성하려는cd 것은 stderr 및 stdout을 / dev / null로 리디렉션 하는 명령입니다. 두 가지 방법이 있습니다.
귀하의 경우 가장 쉬운 방법은 >문자 를 추가하여 단순히 쉘에게 경로 재 지정을 알리는 것 입니다. @erewok이 제안하는 것입니다.
cd - 2>&1 >/dev/null
먼저 stderr (파일 설명자 2)를 파일 설명자 1 (stdout)로 리디렉션 한 다음 stdout (암시 적 1)을 / dev / null로 리디렉션합니다. 순서는 중요합니다. 리디렉션을 되 돌리면 동일한 결과를 얻지 못할 수도 있지만 특정 프로그램이 각 출력 스트림을 사용하는 방식으로 인해 나타나는 것처럼 보일 수도 있습니다.
또는 @demure 에서 제안한 &>것처럼이 구문이 쉘에서 지원되는 경우 두 스트림을 한 번에 리디렉션 하는 데 사용할 수 있습니다 .
cd - &>/dev/null
참고 수행 할 때 이러한 대안 중 하나가 또한 오류를 침묵 없다는 것을 $OLDPWD더 이상 존재하면 시스템 블랙홀로 표준 오류 출력을 리디렉션 이후를. 이것이 우려되는 경우 $?나중에 확인하겠습니다 . 당신은 이것이 정말로 우려되는 일이라면 이것을 직접 확인해야하지만, 적어도 내 테스트에서는 성공한 후에 실패 cd했는지 ( cd $someplace또는 상관없이 cd -) 설정합니다 .$? = 1$? = 0
아마도 당신은 사용할 수 있습니다
cd $OLDPWD
그러나이 경우 더 입력해야합니다 :)
그러나 오류가 있으면 메시지가 / dev / null로 리디렉션되지 않습니다.
cd /tmp bash cd -는 bash: cd: OLDPWD not set두 번째 cd에서 말합니다 . 반면 시퀀스 cd /tmp bash cd $OLDPWD는 ~로 떨어집니다 (거의 확실하게 $ OLDPWD는 빈 문자열로 확장되기 때문에). 문제의 쉘 cd $OLDPWD에서 적어도 하나를 수행하면 제대로 작동 cd하지만 그 전에는 작동하지 않습니다.
$OLDPWD이 설정되어 있지 않으면 이 표시됩니다~.cd -오류를 인쇄합니다 (아마도 이미 있던 곳을 떠날 것입니다).