bash:変数を使用してstderr | stdoutリダイレクトを保存する

bash:変数を使用してstderr | stdoutリダイレクトを保存する

変数を介してstdoutとstderrをリダイレクトする方法はありますか(スクリプトにコマンドオプションを追加するなど)?

たとえば、次のスクリプトがあります。

#!/bin/bash -x
TEST=">/dev/null 2>&1"
OPT='-p -v'
mkdir $OPT 123/123/123 $TEST

-pOPTが問題なく交換され、bashがそれをオプションとして解釈するのがわかります。ただし、リダイレクトはディレクトリ名として解釈されます。

$ ./test.sh 
+ TEST='>/dev/null 2>&1'
+ OPT='-p -v'
+ mkdir -p -v 123/123/123 '>/dev/null' '2>&1'
mkdir: created directory `123/123'
mkdir: created directory `123/123/123'
mkdir: created directory `>/dev'
mkdir: created directory `>/dev/null'
mkdir: created directory `2>&1'

bashで$ VARがディレクトリ名ではなくリダイレ​​クトであると言える方法はありますか?

PS。私は間違った方向に行っているかもしれませんが、スクリプトではオプションで冗長な出力や冗長ではない出力を持っていると思います。ただし、冗長ではないモードでもいくつかの出力が必要なため、スクリプト内の一部のコマンドでstdoutとstderr全体をリダイレクトすることはできません。

ベストアンサー1

別の解決策は次のとおりです。

#!/bin/bash

verbose=0

exec 3>&1
exec 4>&2

if ((verbose)); then
  echo "verbose=1"
else
  echo "verbose=0"
  exec 1>/dev/null
  exec 2>/dev/null
fi

echo "this should be seen if verbose"
echo "this should always be seen" 1>&3 2>&4

次に、1>&3 2>&4出力を表示するコマンドのみを追加します。

おすすめ記事