管道中命令的退出状态

管道中命令的退出状态

我遇到过这段代码但无法理解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

>&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

相关内容