谁能解释这种行为? 运行:
#!/bin/sh
echo "hello world" | read var1 var2
echo $var1
echo $var2
没有任何输出结果,同时:
#!/bin/sh
echo "hello world" > test.file
read var1 var2 < test.file
echo $var1
echo $var2
产生预期的输出:
hello
world
管道不应该一步完成第二个示例中重定向到 test.file 的工作吗?我用 dash 和 bash shell 尝试了相同的代码,并从它们中得到了相同的行为。
最佳答案
最近添加到 bash
的是 lastpipe
选项,它允许管道中的最后一个命令在当前 shell 中运行,而不是子 shell,当作业控制是停用。
#!/bin/bash
set +m # Deactiveate job control
shopt -s lastpipe
echo "hello world" | read var1 var2
echo $var1
echo $var2
确实会输出
hello
world
关于dash-shell - Shell 脚本输入重定向异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2732/