Answers:
如果您是Ubuntu桌面的普通用户,则唯一的登录shell是...您的桌面(您输入密码进入,对吗?)?嗯,从技术上讲,这是一个启动GUI的登录Shell,但这已经成为行话了。是的,它将读取.profile
你(普通用户)唯一的一次,可能会看到一个登录外壳,看起来像一个登录shell是,如果你有一些问题与您的桌面,并切换到同一个虚拟终端Ctrl+ Alt+ F1快捷键。
ssh
(或通过本地连接ssh localhost
)远程访问计算机bash -l
(或sh -l
)模拟初始登录外壳root
登录外壳sudo -i
sudo -u username -i
root
root
用户身份验证(及其密码)su - username
sudo login
命令切换用户~/.pam_environment
(仅变量,其中没有bash命令!),注销,登录,并观看神奇地出现在桌面以及gnome终端中的所有内容!
/etc/profile
,/etc/profile.d
或~/.profile
。
我认为没有“技术术语”就不能给出正确的答案。由于此问题是Google在查询“什么是登录外壳”中弹出的第一个问题,因此我在下面提供了一个更正确的答案:
登录外壳只是一个被告知是登录外壳的外壳。它并不意味着外壳弹出你登录后,虽然平时的应用程序,让您登录告诉贝它启动是一个登录shell。有以下几种方法可以告诉Shell应该是登录用户:
-l
或--login
参数假设知道它的情况下运行shell (我不知道任何不知道的shell -l
,但--login
仅受少数shell支持)。argv[0]
设置为的运行外壳程序-{some_string}
(即,将HYPHEN-MINUS设置为通常的argv[0]
字符串或其他字符串)。这就是ssh和su的作用:su只是使用-su
as 运行可执行文件argv[0]
(大家都认为argv[0]
与当前运行的可执行文件名称有关),-zsh
当用户将/bin/zsh
shell 设置为shell 时,ssh运行zsh 。Shell的Loginess与要求您输入密码或执行其他身份验证过程的任何人都没有任何关系。诸如ssh或login之类的某些程序(或诸如urxvt之类的某些终端模拟器)将shell作为登录程序运行,使用argv[0]
以HYPHEN-MINUS开头的外壳程序。诸如su或sudo(或zsh:请参见-
参考资料中的PRECOMMAND MODIFIERS部分中描述的precommand修饰符man zshmisc
)之类的默认情况下不会执行此操作,但可以这样告知。有些人只能使用其参数(即bash -l
)告诉shell是登录用户:ssh和命令参数(明确告诉ssh在远程端运行什么)。
通常最好是先咨询用于调用壳的程序的文档,以确定壳是否将登录一个和第二执行一些测试,以确定应用是否将启动一个登录壳(例如,通过添加echo
到.profile
)。
argv[0]
对的一个exec*
功能,自然和必然的:你总是提供既 argv[0]
和路径实际使用命令时运行exec*
的功能,即使你没有想argv[0]
从运行的命令不同。其他语言提供了自己的方式。特别是bash允许使用exec -a new_argv0 bash
,但这当然会用您exec
编辑的内容替换当前正在运行的shell ,因此您可能需要使用subshell((exec -a -zsh zsh)
)
$0
,并且可能还设置了其他内容(变量,设置等),以便可以在配置文件中检测到外壳的逻辑性,但是实际上谁会检测到它,这有什么不同呢?这是我所知道的一切。