programing

Bash 스크립트에서 출력을 무음화하는 방법은 무엇입니까?

powerit 2023. 5. 28. 21:05
반응형

Bash 스크립트에서 출력을 무음화하는 방법은 무엇입니까?

stdout으로 출력하는 프로그램이 있는데 파일로 파이핑하는 동안 Bash 스크립트로 출력을 음소거하고 싶습니다.

예를 들어, 프로그램을 실행하면 다음과 같이 출력됩니다.

% myprogram
% WELCOME TO MY PROGRAM
% Done.

나는 다음 스크립트가 단말기에 아무것도 출력하지 않기를 원합니다.

#!/bin/bash
myprogram > sample.s

만약 그것이 stderr에도 출력된다면 당신은 그것을 침묵시키고 싶을 것입니다.파일 설명자 2를 재연결하여 이 작업을 수행할 수 있습니다.

# Send stdout to out.log, stderr to err.log
myprogram > out.log 2> err.log

# Send both stdout and stderr to out.log
myprogram &> out.log      # New bash syntax
myprogram > out.log 2>&1  # Older sh syntax

# Log output, hide errors.
myprogram > out.log 2> /dev/null

stdout으로 stderr 리디렉션

그러면 stderr(설명자 2)이 stdout인 파일 설명자 1로 리디렉션됩니다.

2>&1

stdout을 파일로 리디렉션

이제 이 작업을 수행할 때 stdout을 파일로 리디렉션합니다.sample.s

myprogram > sample.s

stderr 및 stdout을 파일로 리디렉션

두 명령을 결합하면 stderr과 stdout이 모두 sample.s로 리디렉션됩니다.

myprogram > sample.s 2>&1

stderr 및 stdout을 /dev/null로 리디렉션

다음으로/dev/null응용프로그램을 완전히 침묵시키려면 이 옵션을 선택합니다.

myprogram >/dev/null 2>&1

모든 출력:

scriptname &>/dev/null

휴대용:

scriptname >/dev/null 2>&1

휴대용:

scriptname >/dev/null 2>/dev/null

최신 bash(휴대용 없음)의 경우:

scriptname &>-

여전히 답을 찾기 어려운 경우, 특히 출력용 파일을 생성한 경우 명확한 대안을 선택할 수 있습니다. echo "hi" | grep "use this hack to hide the oputut :) "

STDOUT와 STDERR 모두 [모든 것]을(를) 원할 경우 가장 간단한 방법은 다음과 같습니다.

#!/bin/bash
myprogram >& sample.s

그럼 다음과 같이 실행합니다../script단말기로 출력을 받지 못할 것입니다.:)

">&"은 STDERR 및 STDOUT를 의미합니다.&파이프에서도 동일한 방식으로 작동합니다../script |& sed모든 것을 sed에게 보낼 것입니다.

사용:

myprogram &>/dev/null

출력을 얻지 못함

유용한 변형:


  • 숨길 프로그램이 전혀 없는 경우에도 STDOUT를 숨기면서 파일의 STDERR만 가져옵니다.(결코 매달리지 않음):

    stty -echo && ./programMightNotExist 2> errors.log && stty echo
    

  • 완전히 분리하고 모든 것을 침묵시킴, 심지어 상위 스크립트를 삭제해도 중단되지 않음./prog(와 똑같이 행동함)nohup):

    ./prog </dev/null >/dev/null 2>&1 &
    

  • nohup 는 다음과 같이 완전히 분리하는 데도 사용할 수 있습니다.

    nohup ./prog &
    

    로그 파일nohup.out스크립트와 별도로 생성됩니다. 사용tail -f nohup.out그것을 읽기 위해.

참고: 이 답변은 "셸 스크립트 Linux를 실행하는 동안 에코를 끄는 방법"이라는 질문과 관련이 있으며, 이 질문에는 중복된 것으로 표시되었습니다.

에코를 실제로 끄려면 다음 명령을 사용합니다.

딱딱한 느낌의

(예를 들어, 암호를 입력하려고 할 때 암호를 읽을 수 없도록 하려는 경우).스크립트가 끝날 때 에코를 켜야 합니다. 그렇지 않으면 스크립트를 실행하는 사용자는 그 이후로 입력한 내용을 볼 수 없습니다.실행 시 에코를 켜려면:

stty echo

오류 발생출력만 해당:

그래서 [명령]

로고

언급URL : https://stackoverflow.com/questions/2292847/how-to-silence-output-in-a-bash-script

반응형