一尘不染

Shell脚本输入重定向异常

linux

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

#!/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壳都尝试了相同的代码,并且两者的行为相同。


阅读 314

收藏
2020-06-07

共1个答案

一尘不染

bashlastpipe选项最近添加了一个选项,当停用作业控制时,该选项允许管道中的最后一条命令在当前外壳程序中运行,而不是子外壳程序中运行。

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

确实会输出

hello
world
2020-06-07