shell脚本问题:在终端上不起作用,但在脚本中起作用

时间:2010-03-12 19:16:19

标签: shell

当一个奇怪的事情发生时,我正在玩shell脚本。我需要有人解释一下。

我有一个'infile'文件,内容:

line one
line2
third line
last

测试脚本test.sh,内容:

read var1
echo $var1

我执行了:

cat infile | ./test.sh

输出

line one

然后我做了:

cat infile | read var1
echo $var1

结果:一个空行。

我甚至尝试过

cat infile | read var1; echo $var1;

同样的结果。

为什么会这样?

2 个答案:

答案 0 :(得分:1)

管道导致命令在子shell中运行,这意味着环境变量不会传播到主shell。使用重定向或herestring解决这个问题:

read var1 < infile

答案 1 :(得分:0)

或试试这个:

cat file | ( read var1; echo $var1; )