假设我们有一个名为的简单脚本question
:
#!/bin/bash
read -rp "What's your name?" ans
echo "Your name is $ans"
让我们用cat
我们的例子
cat question | bash
我们将脚本文件的内容提供给 Bash 的标准输入并将其作为命令执行。执行时,使用 bash 的标准输入,因此管道之外的任何内容都不能输入到标准输入,除非放在管道之前。
为了缓解这种情况,一个选项是下载脚本文件的内容,首先将其传递到 shell,然后才执行它。
bash -c "$(cat ./question)"
我发现的语法的另一个选项... | bash
是,在脚本中,如果我们将当前进程替换为新进程,其中标准输入从终端重定向,包装在子 shell 中,它就会工作,如下所示:
#!/bin/bash
(
exec < /dev/tty
read -rp "What's your name?" ans
echo "Your name is $ans"
)
我想知道还有哪些其他选择或者最佳实践是什么。