我已阅读此内容中的以下内容问题:
运行脚本的 shell 始终是非交互式 shell,但脚本可以通过提示用户输入值来模拟交互式 shell。
我不知道上面的说法是否正确,我认为以下说法是正确的:
运行脚本并且此脚本允许您输入数据的 shell 是交互式 shell(而不是像引用所说的交互式 shell 的“模拟”)。
运行脚本且该脚本不允许您输入数据的 shell 是非交互式 shell。
哪种说法是正确的?
答案1
运行脚本的 shell 是非交互式 shell。
非交互式 shell 仍然可以使用例如read
从标准输入读取数据。
如果标准输入是终端,这可能会提供一定程度的“交互”,但它不会使执行脚本的 shell 成为交互式 shell。星期四脚本不过将是“互动的”。
该文本令人困惑,因为它使用“交互式”一词来表示两件事:
- 为了执行 shell 脚本而启动的 shell 是非交互式的(从某种意义上说,它没有作业控制,默认情况下它本身不提供提示等)。这是 shell 类型的技术术语,就像“登录 shell”和“交互式 shell”一样。
- 通过该相同脚本获取数据的动作可以是“交互式的”(如果不是从例如管道或文件读取)。但话又说回来,任何从标准输入获取数据的命令都可以说是交互式的。
tr 'a-z' 'A-Z'
本身将“交互地”将所有小写 ASCII 字符转换为大写。