このコードを見つけましたが、理解できませんでした。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 >&4
echo
すべてのファイル記述子をジャグリングせずに同じ内容を作成する別の方法は次のとおりです。
tail -n 5 /etc/passwd
printf 'exitcode = %d\n' "$?"
(これは代わり$exitcode
の終了状態になりますが)tail
cat