スクリプト内の標準出力がリダイレクトされたかどうかはどうすればわかりますか?

スクリプト内の標準出力がリダイレクトされたかどうかはどうすればわかりますか?

kshにスクリプトがあります。コマンドラインでリダイレクトがあるかどうかに応じてを渡しますexec 1>file。スクリプトを呼び出すコマンドが出力をリダイレクトした場合、スクリプト自体内でこれをどのようにテストできますか?

スクリプトのPIDで$@、、、、$*および$0aを試してみましたがps(シャバンと一緒に)リダイレクトは表示されません。

この例では、スクリプトはAIXで実行されます。

ベストアンサー1

AIXでは、stdoutファイル記述子をで使用できる/proc/$$/fd/1ため、通常のファイルであるかどうかをテストできます。

if [ -f "/proc/$$/fd/1" ]
then
  echo stdout has already been redirected
else
  echo redirecting stdout
  exec 1>file
  echo some output
fi

/bin/sh は /bin/ksh にハードリンクされているため、両方のシェルで同じ動作が得られます。

必要に応じて、stdoutが/ dev / nullにリダイレクトされていることを個別にテストできます。

if [ "/proc/$$/fd/1" -ef /dev/null ]; then : ...; fi

おすすめ記事