出力を/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

あなたは理解しました。とても便利なツールです。

関連情報