다양한 방법으로 리디렉션을 시도했지만 소용이 없었 stdout
습니다 . 나는 평생 동안 bash를 사용해왔고 이런 문제를 겪어본 적이 없지만 BSD에서는 멈췄습니다 .stderr
/dev/null
/bin/sh
내가 시도한 것:
if ls ./python* 2> /dev/null; then
echo found Python
fi
... 작동합니다. Python이 없으면 ls의 오류 메시지가 표시되지 않습니다. 그러나 python.tgz
존재하는 경우 다음과 같이 줄이 출력됩니다.
# ./test.sh
./python-2.7.3p1.tgz
나는 시도했다:
if ls ./python* &> /dev/null; then
echo found Python
fi
그리고
if ls ./python* 2>1 > /dev/null; then
echo found Python
fi
그리고
if ls ./python* > /dev/null; then
echo found Python
fi
실제로 작동하는 것은 없습니다. 출력 중 하나만 리디렉션할 수 있으며 동시에 둘 다를 리디렉션할 수는 없습니다.
답변1
이는 모든 POSIX 호환 셸에서 작동합니다.
ls good bad >/dev/null 2>&1
당신은해야합니다표준 출력 리디렉션첫 번째stderr에 복사하기 전에;먼저 복사하면 stderr은 stdout이 원래 가리킨 것을 가리킬 것입니다.
불다, zsh 및 기타 일부 쉘도 바로가기를 제공합니다.
ls good bad &>/dev/null
이는 명령줄에서는 편리하지만 이식 가능한 스크립트에서는 피해야 합니다.