我被这个弄糊涂了
$ bash <<EOF
read -p 'This will not work' input
EOF因为
$ cat script
read -p 'This will work fine' input
$ bash script
This will work fine有什么关系呢?这似乎是一种标准行为,因为ash的行为完全相同。
根据到目前为止所提供的答案,我怀疑(然后确认)以下的作品。我认为这实际上是我一直想要做的,但<()语法始终是我忘记存在的语法。
$ bash <( cat <<EOF
read -p 'This works' input
EOF
)发布于 2016-10-30 08:08:50
每个进程不能同时拥有多个stdin,因此作为输入传递给bash的此处文档不能包含read -p。
使用bash script,运行的script是Bash的一个子进程,没有并发的stdin到read,因此它将按预期工作。
发布于 2016-10-30 13:18:56
在这两种情况下,read命令从执行它的bash进程继承其标准输入。
在第一个示例中,这意味着实际包含read命令的first文档。取决于bash已经读取了多少文档(通常是所有文档),read没有什么可读取的,因此它以非零退出状态退出。
在第二个示例中,bash在不同的文件描述符上打开命名的文件。read仍然从bash进程继承它的标准输入,但是这次bash根本没有读取它,所以read命令获得了下一个可用的行。这里的标准输入是终端,所以read会阻塞,直到用户输入一行。
发布于 2019-02-12 13:31:03
最简单的解决方案是将交互命令写入临时文件,然后从临时文件中获取:
cat <<'_EOF_' >/tmp/$$.sh
read -p 'This is an interactive command, please enter a string: ' STRING
_EOF_
# Command in temporary file get executed here
source /tmp/$$.sh
echo "STRING= '$STRING'"https://stackoverflow.com/questions/40326598
复制相似问题