Bash를 사용하여 명령에서 모든 출력을 억제하는 방법은 무엇입니까?
문제
매개 변수가있는 프로그램을 실행하는 Bash 스크립트가 있습니다. 그 프로그램은 어떤 상태를 출력합니다 (이 작업을 수행합니다 ...). 이 프로그램이 조용 할 수있는 옵션은 없습니다. 스크립트가 아무것도 표시하지 못하게하려면 어떻게해야합니까?
Windows "Echo Off"와 같은 것을 찾고 있습니다.
해결책
다음은 표준 출력을 NULL 장치 (비트 버킷)로 보냅니다.
scriptname >/dev/null
또한 오류 메시지가 전송되기를 원한다면 중 하나를 사용하십시오 (첫 번째는 모든 쉘에서 작동하지 않을 수 있습니다).
scriptname &>/dev/null
scriptname >/dev/null 2>&1
scriptname >/dev/null 2>/dev/null
그리고 메시지를 녹음하고 싶지만 보지 않으려면 교체하십시오. /dev/null
다음과 같은 실제 파일로 :
scriptname &>scriptname.out
완전성을 위해 Windows Cmd.exe (여기서 "nul"은 "/dev/null"과 같습니다).
scriptname >nul 2>nul
다른 팁
같은 것
script > /dev/null 2>&1
이렇게하면 표준 출력을 방지 할 수 있습니다 그리고 오류 출력, 둘 다를 리디렉션합니다 /dev/null
.
노력하다
: $(yourcommand)
:
"아무것도하지 않는다"는 짧은 일입니다.
$()
단지 당신의 명령입니다.
일부 상황에 맞는 대안은 명령 결과를 변수에 할당하는 것입니다.
$ DUMMY=$( grep root /etc/passwd 2>&1 )
$ echo $?
0
$ DUMMY=$( grep r00t /etc/passwd 2>&1 )
$ echo $?
1
BASH 및 기타 POSIX CommandLine 통역사는 변수 할당을 명령으로 간주하지 않으므로 현재 명령의 리턴 코드가 존중됩니다.
메모: The와 할당 typeset
또는 declare
키워드는 명령으로 간주되므로 평가 된 반환 코드는 할당 자체이며 하위 쉘에서 실행 된 명령이 아닙니다.
$ declare DUMMY=$( grep r00t /etc/passwd 2>&1 )
$ echo $?
0
Andynormancx Post와 마찬가지로 이것을 사용하십시오 : (유닉스 환경에서 일하는 경우)
scriptname > /dev/null
또는 이것을 사용할 수 있습니다 : (Windows 환경에서 일하는 경우)
scriptname > nul
이 예를 살펴보십시오 리눅스 문서 프로젝트:
3.6 샘플 : STDERR 및 STDOUT 2 파일
이것은 프로그램의 모든 출력을 파일에 배치합니다. 명령이 절대적인 침묵으로 전달되기를 원한다면 이것은 때때로 Cron 항목에 적합합니다.
rm -f $(find / -name core) &> /dev/null
즉,이 간단한 리디렉션을 사용할 수 있습니다.
/path/to/command &>/dev/null
귀하의 스크립트에서는 출력을 제공 할 줄에 다음을 추가 할 수 있습니다.
some_code 2>>/dev/null
그렇지 않으면 시도 할 수도 있습니다
some_code >>/dev/null