我对此有点困惑
$ bash <<EOF
read -p 'This will not work' input
EOF
Run Code Online (Sandbox Code Playgroud)
因为
$ cat script
read -p 'This will work fine' input
$ bash script
This will work fine
Run Code Online (Sandbox Code Playgroud)
有什么不同?这似乎是一种标准行为,因为ash
行为方式完全相同。
根据迄今为止提供的答案,我怀疑(然后确认)以下方法有效。我认为这实际上是我一直想做的事情,但<()
我总是忘记语法的存在。
$ bash <( cat <<EOF
read -p 'This works' input
EOF
)
Run Code Online (Sandbox Code Playgroud)
作为read
bash 内置命令,它继承了bash
上面提到的 stdin。在第一种情况下,bash
这里有一个标准输入文档(或更专业地,文件描述符0),并且没有任何内容可供read
阅读。
read
只从 stdin ( fd0
) 读取,而在第二种情况下,bash
打开另一个文件描述符而不是 stdin 来读取脚本script
,这与传递给 的 stdin 不冲突,read
因此read
可以按预期工作。
你可以尝试这个来测试一下。
$ bash << EOF ls -l /proc/$$/fd EOF
和
$猫脚本.sh ls -l /proc/$$/fd $bash脚本.sh如果您比较上面示例的输出,差异就会很明显。
归档时间: |
|
查看次数: |
754 次 |
最近记录: |