开发者社区> 问答> 正文

Shell脚本输入重定向异常

谁能解释这种行为?正在运行:

#!/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的重定向吗?我对破折号和bash壳都尝试了相同的代码,并且两者的行为相同。

展开
收起
游客ufivfoddcd53c 2020-01-03 18:43:04 864 0
1 条回答
写回答
取消 提交回答
  • bash该lastpipe选项最近添加了一个选项,当停用作业控制时,该选项允许管道中的最后一条命令在当前外壳程序中运行,而不是子外壳程序中运行。

    #!/bin/bash
    set +m      # Deactiveate job control
    shopt -s lastpipe
    echo "hello world" | read var1 var2
    echo $var1
    echo $var2
    
    

    确实会输出

    hello
    world
    
    2020-01-03 18:43:31
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
Shell 脚本速查手册 立即下载
低代码开发师(初级)实战教程 立即下载
阿里巴巴DevOps 最佳实践手册 立即下载