![电脑开机后最初调用的Shell是登录Shell还是非登录Shell?](https://linux22.com/image/130736/%E7%94%B5%E8%84%91%E5%BC%80%E6%9C%BA%E5%90%8E%E6%9C%80%E5%88%9D%E8%B0%83%E7%94%A8%E7%9A%84Shell%E6%98%AF%E7%99%BB%E5%BD%95Shell%E8%BF%98%E6%98%AF%E9%9D%9E%E7%99%BB%E5%BD%95Shell%EF%BC%9F%20.png)
我读了多篇提到登录 shell 和非登录 shell 的文章,
但我仍然很困惑。
登录 Shell 和非登录 Shell 之间的区别? - Unix 和 Linux 堆栈交换
UNIX 学派:登录 shell 还是非登录 shell?
简单来说,
我自己的电脑开机后启动的shell,
不就是登录shell还是非登录shell吗?
$ echo $SHELL
/bin/bash
$ echo $0
-bash
另外,您能否帮忙确定程序调用的 shell 是否是登录 shell?
import subprocess
subprocess.run('ls -l', shell=True)
答案1
如中所述这个答案:
prompt> echo $0 -bash # "-" is the first character. Therefore, this is a login shell.
所以你的第一个例子显示了一个登录 shell。
正如同一答案中也指出的那样,
信息可以在
man bash
(搜索调用)中找到。以下是摘录:登录 shell 的参数零的第一个字符是
-
,或者以选项开头--login
。
并从Python 文档:
... Popen 的作用相当于:
Popen(['/bin/sh', '-c', args[0], args[1], ...])
由于给出的唯一选项是-c
,因此它不是登录 shell。