パイプラインのコマンド終了ステータス

パイプラインのコマンド終了ステータス

このコードを見つけましたが、理解できませんでした。exec >&p

私の理解に基づいて1を編集します。

#! /usr/bin/ksh
exec 4>&1               ## standard output is first saved as file descriptor 4
tail -5 >&4 |&          ## spawn it as co process
exec >&p                ## output of co-process is moved to standard output
cat /etc/passwd         ## this can be any command like ps aux
exitcode=$?
exec >&- >&4            ## standard output is closed using >&-
wait
echo exitcode = $exitcode
exit 0

ベストアンサー1

>&pシェルの特別なリダイレクトは、ksh93標準出力ストリームを現在コプロセスで実行されているコマンドの標準入力にリダイレクトします。

与えられた例では、tail -5コマンドはを使用して補助プロセスで始まり、スクリプト|&exec >&pすべての出力をそのプロセスにリダイレクトするために使用されます(tail例では出力のみ)。cat

元の標準出力は最初にファイルディスクリプタ4に保存されexec 4>&1(ファイルディスクリプタ4にも書き込まれますtail)。exec >&4echo

すべてのファイル記述子をジャグリングせずに同じ内容を作成する別の方法は次のとおりです。

tail -n 5 /etc/passwd
printf 'exitcode = %d\n' "$?"

(これは代わり$exitcodeの終了状態になりますが)tailcat

おすすめ記事