出力がたくさんあるシンプルなスクリプトがあります。
#!/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 bash
CentOS 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
あなたは理解しました。とても便利なツールです。