출력없이 "cd-"를 사용하십시오.


28

cd -출력을 에코하지 않고 명령을 어떻게 실행 합니까?
시도 cd - 2>&1 /dev/null했지만 대상 디렉토리가 인쇄됩니다.
그 이유는 bash 함수를 사용하고 불필요한 출력을 원하지 않기 때문입니다.

답변:


32

다음과 같이 시도하십시오.

cd - > /dev/null

당신은 또한 할 수 있습니다 :

cd - > uselessfile

출력을 STDOUT 대신 "uselessfile"파일로 보냅니다.

파일을 만들거나 덮어 쓰지 않고 추가 할 수도 있습니다.

cd - >> uselessfile

15

@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


5

아마도 당신은 사용할 수 있습니다

cd $OLDPWD

그러나이 경우 더 입력해야합니다 :)

그러나 오류가 있으면 메시지가 / dev / null로 리디렉션되지 않습니다.


1
$OLDPWD이 설정되어 있지 않으면 이 표시됩니다 ~. cd -오류를 인쇄합니다 (아마도 이미 있던 곳을 떠날 것입니다).
CVn

1
당신은 옳지 않습니다. $ OLDPWD가 설정되지 않은 경우 (이유가 사용자가 설정을 해제 할 수있는 경우) 'cd-'의 결과는 "cd $ OLDPWD"와 같습니다. 매뉴얼 페이지를 확인하십시오 ( 'cd-'는 'cd "$ OLDPWD"&& pwd'와 동일합니다). 아니면 당신은 그것을 테스트 할 수 있습니다 :) 'OLDPWD = ""; cd- '-~에 들어가서 ~ 문자를 인쇄하는 것을보십시오.
uzsolt

1
방금 테스트했습니다. 내 시스템에서 시퀀스 cd /tmp bash cd -bash: cd: OLDPWD not set두 번째 cd에서 말합니다 . 반면 시퀀스 cd /tmp bash cd $OLDPWD는 ~로 떨어집니다 (거의 확실하게 $ OLDPWD는 빈 문자열로 확장되기 때문에). 문제의 쉘 cd $OLDPWD에서 적어도 하나를 수행하면 제대로 작동 cd하지만 그 전에는 작동하지 않습니다.
CVn

흠, 맞아. zsh로 테스트했으며 zsh로 오류 메시지가 표시되지 않습니다.
uzsolt

1

stdout 및 stderr를 리디렉션하십시오. cd - &>/dev/null

&>짧은 손 버전입니다 cd - 2>/dev/null 1>&2.

  • 참고로 &>bash> = 4.0이 필요합니다.

추신. 대부분의 명령은 위치를 가리킬 수 있으므로 실제로 필요한 것은 아닙니다.cd


0

당신이 사용할 수있는:

cd ~-

bash 맨 페이지에 따르면 Tilde Expansion:

물결표 접두어가`~- '이면 쉘 변수 OLDPWD의 값이 설정되어 있으면이를 대체합니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.