출력을 /dev/null로 자동 리디렉션

출력을 /dev/null로 자동 리디렉션

출력이 많은 간단한 스크립트가 있습니다.

#!/bin/bash
{
apt-get update && apt-get upgrade
} 2>&1

./script.sh >/dev/null 2>&1음소거하여 시작하세요.

내부에서 스크립트를 무음으로 설정할 수 있나요?

답변1

스크립트에 리디렉션을 추가할 수 있습니다.

--편집자--Jeff Schaller의 논평 후

#!/bin/bash
# case 1: if you want to hide all message even errors
{
apt-get update && apt-get upgrade
} > /dev/null 2>&1


#!/bin/bash
# case 2: if you want to hide all messages but errors
{
apt-get update && apt-get upgrade
} > /dev/null 

답변2

이것이 bash내장 명령 exec의 목적입니다(다른 작업도 수행할 수 있지만).

man bashCentOS 6.6 상자 에서 발췌 :

   exec [-cl] [-a name] [command [arguments]]
          ...
          If command is not specified, any redirections take effect in the
          current shell, and the return status is 0.  If there is a 
          redirection error, the return status is 1.

따라서 당신이 찾고 있는 것은 옵션을 전달할 때만 exec >/dev/null 2>&1래퍼를 사용하여 스크립트를 침묵시킬 수 있습니다 .getopts-q

#!/bin/bash

getopts :q opt
case $opt in
  q)
    exec >/dev/null 2>&1
    ;;
esac
shift "$((OPTIND-1))"

포장지는 필요하지 않지만 getopts있으면 좋을 것 같습니다. 그럼에도 불구하고 이는 전체 스크립트를 중괄호로 묶는 것보다 훨씬 깔끔합니다. exec다음을 사용하여 출력을 로그 파일에 추가 할 수도 있습니다 .

exec 2>>/var/myscript_errors.log
exec >>/var/myscript_output.log

당신은 이해했습니다. 매우 편리한 도구입니다.

관련 정보