运行脚本时对交互式和非交互式 shell 的含义感到困惑

运行脚本时对交互式和非交互式 shell 的含义感到困惑

我已阅读此内容中的以下内容问题

运行脚本的 shell 始终是非交互式 shell,但脚本可以通过提示用户输入值来模拟交互式 shell。

我不知道上面的说法是否正确,我认为以下说法是正确的:

  • 运行脚本并且此脚本允许您输入数据的 shell 是交互式 shell(而不是像引用所说的交互式 shell 的“模拟”)。

  • 运行脚本且该脚本不允许您输入数据的 shell 是非交互式 shell。

哪种说法是正确的?

答案1

运行脚本的 shell 是非交互式 shell。

非交互式 shell 仍然可以使用例如read从标准输入读取数据。

如果标准输入是终端,这可能会提供一定程度的“交互”,但它不会使执行脚本的 shell 成为交互式 shell。星期四脚本不过将是“互动的”。

该文本令人困惑,因为它使用“交互式”一词来表示两件事:

  1. 为了执行 shell 脚本而启动的 shell 是非交互式的(从某种意义上说,它没有作业控制,默认情况下它本身不提供提示等)。这是 shell 类型的技术术语,就像“登录 shell”和“交互式 shell”一样。
  2. 通过该相同脚本获取数据的动作可以是“交互式的”(如果不是从例如管道或文件读取)。但话又说回来,任何从标准输入获取数据的命令都可以说是交互式的。 tr 'a-z' 'A-Z'本身将“交互地”将所有小写 ASCII 字符转换为大写。

相关内容