GNU/Linux >> Linux の 問題 >  >> Linux

成功した場合にのみシェル コマンドの出力を非表示にしますか?

解決策 1:

この目的のためにスクリプトを書くのは簡単です。

この完全にテストされていないスクリプトのようなもの。

OUTPUT=`tempfile`
program_we_want_to_capture &2>1 > $OUTPUT
[ $? -ne 0 ]; then
    cat $OUTPUT
    exit 1
fi
rm $OUTPUT

一方、スクリプトの一部として実行するコマンドについては、通常、単にすべての出力を出力するよりも優れたものが必要です。私は自分が見るものを未知のものに限定することがよくあります。これは、10 年以上前に読んだものから編集したスクリプトです。

#!/bin/bash

the_command 2>&1 | awk '
BEGIN \
{
  # Initialize our error-detection flag.
  ErrorDetected = 0
}
# Following are regex that will simply skip all lines
# which are good and we never want to see
/ Added UserList source/ || \
/ Added User/ || \
/ init domainlist / || \
/ init iplist / || \
/ init urllist / || \
/ loading dbfile / || \
/^$/ {next} # Uninteresting message.  Skip it.

# Following are lines that we good and we always want to see
/ INFO: ready for requests / \
{
  print "  " $0 # Expected message we want to see.
  next
}

# any remaining lines are unexpected, and probably error messages.  These will be printed out and highlighted.
{
  print "->" $0 # Unexpected message.  Print it
  ErrorDetected=1
}

END \
{
  if (ErrorDetected == 1) {
    print "Unexpected messages (\"->\") detected in execution."
    exit 2
  }
}
'
exit $?

解決策 2:

これを行うクリーンな方法はないと思います。私が考えることができる唯一のことは

  • コマンドの出力をキャプチャします。
  • コマンドの戻り値を確認し、失敗した場合は
    • キャプチャした出力を表示します。

これを実装するのは興味深いプロジェクトかもしれませんが、おそらく Q&A を超えています。

解決策 3:

次のような bash 関数をセットアップします:

function suppress { /bin/rm --force /tmp/suppress.out 2> /dev/null; ${1+"[email protected]"} > /tmp/suppress.out 2>&1 || cat /tmp/suppress.out; /bin/rm /tmp/suppress.out; }

次に、コマンドを実行するだけです:

suppress foo -a bar

解決策 4:

試してみてください:

out=`command args...` || echo $out

Linux
  1. コマンドの出力をシェル変数に割り当てる方法は?

  2. `cd`外部コマンドのポイント?

  3. コマンドの出力をシェル変数に保存しますか?

  1. シェルで`command`と$(command)を使用してコマンド出力を取得することの違いは何ですか?

  2. `time Command`でコマンドの出力をリダイレクトしますか?

  3. シェル コマンドの出力の最初の行を取得する

  1. Linuxシェルのコマンドラインエイリアス

  2. シェルから Vim コマンドを実行するには?

  3. docker でのコマンド出力のリダイレクト