我编写了一个名为test.sh
的shell脚本:
#!/bin/bash
read MY_NAME
echo $MY_NAME
当我按文件执行时,例如:
./test.sh
一切正常,但如果我按字符串执行,例如:
cat ./test.sh | sh
没有任何输出。当我使用字符串执行命令时,读取命令不起作用。我该如何解决它?
所以,如果我想用字符串执行脚本并从stdin中读取一些值,该如何工作?
答案 0 :(得分:3)
当您在管道中运行的shell执行脚本时,shell的stdin连接到管道,因此read
从管道读取,但没有任何内容,因为一切都已经已被shell读取(或者更糟糕的是,如果脚本足够长,read
可能会在shell读取之前吃掉它的一部分。)
顺便说一句,在bash
上运行sh
个脚本,在许多系统上sh
和bash
都不相同。