Bash 重定向/管道到read命令
这是我上一个问题的后续。我仍在尝试从另一个脚本Bash 重定向/管道到read命令,bash,shell,scripting,pipe,zsh,Bash,Shell,Scripting,Pipe,Zsh,这是我上一个问题的后续。我仍在尝试从另一个脚本shallowScript中命令一个脚本deepScript,并在终端上显示之前处理其输出。下面是一个代码示例: deepScript.sh #!/bin/zsh print "Hello - this is deepScript" read "ans?Reading : " print $ans #!/bin/zsh function __process { while read input; do echo $inpu
shallowScript
中命令一个脚本deepScript
,并在终端上显示之前处理其输出。下面是一个代码示例:
deepScript.sh
#!/bin/zsh
print "Hello - this is deepScript"
read "ans?Reading : "
print $ans
#!/bin/zsh
function __process {
while read input; do
echo $input | sed "s/e/E/g"
done }
print "Hello - this is shallowScript"
. ./deepScript.sh |& __process
shallowScript.sh
#!/bin/zsh
print "Hello - this is deepScript"
read "ans?Reading : "
print $ans
#!/bin/zsh
function __process {
while read input; do
echo $input | sed "s/e/E/g"
done }
print "Hello - this is shallowScript"
. ./deepScript.sh |& __process
(编辑:此语法和下面粘贴的2个备选方案的结果)
[更新]
我已经为上次重定向尝试了其他语法/deepScript.sh |&u进程
,每种语法都有不同的结果,但当然它们都不是我想要的结果。我将粘贴每个语法和/shallowScript.sh
的结果输出(在读取时键入“input”)以及我目前的发现
选项1:/deepScript.sh |和u进程
由此看来,/deepScript.sh
是从子shell运行的,但不是\u进程
。输出:
zsh : ./shallowScript.sh
Hello - this is shallowScript
HEllo - this is dEEpScript
input
REading : input
基本上,前两行按预期打印,然后脚本直接等待stdin输入,而不是打印提示符读取:
,然后打印提示符并执行print$ans
选项2:\u过程<观察到的延迟来自两个因素:
deepScript.sh
和进程
异步运行
read
返回前读取完整的一行
deepScript.sh
将提示写入标准错误,但没有换行符。然后,它等待您的输入,而进程
继续等待写入一整行,以便它对读取
的调用可以完成。chepner,您有什么建议的解决方法吗?我建议不要尝试同时处理标准输出和标准错误。它们是两个独立的流,任何将它们合并(通过管道将两者合并到同一个命令中)的尝试都将导致它们以不确定的方式交错。\uu process
究竟做了什么,它需要同时处理这两个方面?事实上,我考虑这一点的唯一原因是因为read
将其提示符打印到stderr(至少zsh的内置read)。但是没有它我可以活下去;无论如何,在上面的选项2和3中,我只尝试将deepScript
的标准输出发送到\u进程
,并复制了上面的时髦结果。在现实生活中,\u进程
对输出执行一些sed
,并根据某些模式的存在进行一些日志记录。似乎在read
等待\n
时,我必须找到解决方法。