当`... | 时如何重新获得脚本交互性bash`最佳实践?

当`... | 时如何重新获得脚本交互性bash`最佳实践?

假设我们有一个名为的简单脚本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"
)

我想知道还有哪些其他选择或者最佳实践是什么。

相关内容