Pipe
管道中命令的退出狀態
我遇到過這段程式碼但無法理解**
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
>&p
shell中的特殊重定向ksh93
將標準輸出流重定向到目前作為協同程序執行的命令的標準輸入。在給出的範例中,
tail -5
命令作為協同程序使用 啟動|&
,並通過使用exec >&p
腳本將所有輸出從那裡重定向到tail
程序(僅cat
範例中的輸出)。原始標準輸出首先保存為文件描述符 4
exec 4>&1
(並且它也是寫入的文件描述符 4tail
),exec >&4
然後在最終echo
.另一種編寫相同內容的方法,無需所有文件描述符雜耍,將是
tail -n 5 /etc/passwd printf 'exitcode = %d\n' "$?"
(雖然
$exitcode
這裡將是退出狀態tail
而不是退出狀態cat
)