代码之家  ›  专栏  ›  技术社区  ›  jrharshath

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

  •  0
  • jrharshath  · 技术社区  · 16 年前

    我正在玩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 回复  |  直到 16 年前
        1
  •  1
  •   Ignacio Vazquez-Abrams    16 年前

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

    read var1 < infile
    
        2
  •  0
  •   Pointy    16 年前

    或者试试这个:

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