Bash를 사용하여 명령에서 모든 출력을 억제하는 방법은 무엇입니까?

StackOverflow https://stackoverflow.com/questions/617182

  •  03-07-2019
  •  | 
  •  

문제

매개 변수가있는 프로그램을 실행하는 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
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top