Bash在字符串中执行命令包括' read',read无法读取stdin

时间:2017-09-01 10:42:18

标签: linux bash shell unix sh

我编写了一个名为test.sh的shell脚本:

#!/bin/bash
read MY_NAME
echo $MY_NAME

当我按文件执行时,例如:

./test.sh

一切正常,但如果我按字符串执行,例如:

cat ./test.sh | sh

没有任何输出。当我使用字符串执行命令时,读取命令不起作用。我该如何解决它?

所以,如果我想用字符串执行脚本并从stdin中读取一些值,该如何工作?

1 个答案:

答案 0 :(得分:3)

当您在管道中运行的shell执行脚本时,shell的stdin连接到管道,因此read从管道读取,但没有任何内容,因为一切都已经已被shell读取(或者更糟糕的是,如果脚本足够长,read可能会在shell读取之前吃掉它的一部分。)

顺便说一句,在bash上运行sh个脚本,在许多系统上shbash都不相同。