电脑开机后最初调用的Shell是登录Shell还是非登录Shell?

电脑开机后最初调用的Shell是登录Shell还是非登录Shell?

我读了多篇提到登录 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。

相关内容