cd -
출력을 에코하지 않고 명령을 어떻게 실행 합니까?
시도 cd - 2>&1 /dev/null
했지만 대상 디렉토리가 인쇄됩니다.
그 이유는 bash 함수를 사용하고 불필요한 출력을 원하지 않기 때문입니다.
답변
다음과 같이 시도하십시오.
cd - > /dev/null
당신은 또한 할 수 있습니다 :
cd - > uselessfile
출력을 STDOUT 대신 “uselessfile”파일로 보냅니다.
파일을 만들거나 덮어 쓰지 않고 추가 할 수도 있습니다.
cd - >> uselessfile
답변
@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로 리디렉션되지 않습니다.
답변
stdout 및 stderr를 리디렉션하십시오.
cd - &>/dev/null
의 &>
짧은 손 버전입니다 cd - 2>/dev/null 1>&2
.
- 참고로
&>
bash> = 4.0이 필요합니다.
추신. 대부분의 명령은 위치를 가리킬 수 있으므로 실제로 필요한 것은 아닙니다.cd
답변
당신이 사용할 수있는:
cd ~-
bash 맨 페이지에 따르면 Tilde Expansion
:
물결표 접두어가`~- ‘이면 쉘 변수 OLDPWD의 값이 설정되어 있으면이를 대체합니다.