/bin/sh를 사용하여 stderr 및 stdout을 /dev/null로 리디렉션합니다.

/bin/sh를 사용하여 stderr 및 stdout을 /dev/null로 리디렉션합니다.

다양한 방법으로 리디렉션을 시도했지만 소용이 없었 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

이는 명령줄에서는 편리하지만 이식 가능한 스크립트에서는 피해야 합니다.

관련 정보