kshにスクリプトがあります。コマンドラインでリダイレクトがあるかどうかに応じてを渡しますexec 1>file
。スクリプトを呼び出すコマンドが出力をリダイレクトした場合、スクリプト自体内でこれをどのようにテストできますか?
スクリプトのPIDで$@
、、、、$*
および$0
aを試してみましたが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