mkfifo foo
printf %s\\n bar | tee foo &
tr -s '[:lower:]' '[:upper:]' <foo
wait
rm foo
这是我想要执行的操作的有效 POSIX shell 脚本:
printf %s\\n bar
是产生标准输出的外部程序的象征tr -s '[:lower:]' '[:upper:]'
象征着另一个应该接收标准输出并对其执行某些操作的命令tee
将 stdout 复制到命名管道 foo
输出符合预期:
bar
BAR
现在我想整理一下代码,让它变成这样external_program | my_function
。就像这样:
f() (
mkfifo foo
tee foo &
tr -s '[:lower:]' '[:upper:]' <foo
wait
rm foo
)
printf %s\\n bar | f
但现在根本就没有任何输出。