我知道交互式/非交互式和登录/非登录 shell 之间的区别是什么,但在实践中似乎永远不会有非交互式登录shell,除非您/bin/bash --login some-script.sh在脚本中有类似的东西(甚至看起来有点奇怪)。这是正确的还是它们更常见?
cjs*_*cjs 10
我假设您正在谈论 Bash 的登录与非登录以及交互式与非交互式 Bash shell 的概念,如联机帮助页的调用部分中所述。(这与James Youngman 对文件中用作“shell”(或用户命令解释器)的任何任意命令的回答以及passwd(5)该程序是否接受用户输入的解释不同;有些,例如/usr/sbin/nologin,显然不。 )
您是正确的,/bin/bash --login some-script.sh将产生非交互式登录 Bash 调用,这可能是一个病态的例子。有一种情况,可能不常见但并不奇怪,会产生非交互式登录 shell:ssh somehost < some-file. 这里sshd将使用argv[0]set to启动 Bash,-bash因为它没有得到运行命令,导致 Bash 认为自己是一个登录 shell,但是,因为 stdin 没有连接到终端,Bash 不会将自己设置为交互模式($-不会包含i) .
(就个人而言,这种情况似乎比相反的情况更合理,ssh somehost somecommand, 不被视为“登录外壳”,即使它somehost是如上所述的全新登录。)
我最近做了我很久以前应该做的事情,并将Bash 的模式和运行的 init 文件放在一起。如果您觉得它令人困惑,请记住这一点,至少我也是如此。这让我感到迷惑不解,他们最初的目标是关于何时.bashrc执行的规则。