Pipe

管道中命令的退出狀態

  • May 2, 2019

我遇到過這段程式碼但無法理解**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

>&pshell中的特殊重定向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

引用自:https://unix.stackexchange.com/questions/516603