/usr/bin/login 和 /usr/bin/bash 之间的区别

/usr/bin/login 和 /usr/bin/bash 之间的区别

Terminal.app 有贝壳打开设置默认登录 shell (/usr/bin/login)命令(完整路径)(默认包含/usr/bin/bash作为路径)选项。

开箱即用,我发现选择的选项是默认登录 shell (/usr/bin/login)

有什么区别/usr/bin/登录, 和/usr/bin/bash? 哪一个应该选择作为默认 shell?

答案1

实际的区别在于生成的 shell 环境读取其初始配置设置的方式。

/usr/bin/login 派生了一个登录 shell。我认为它调用了身份验证过程,但如果你已经登录,你可能看不到任何可见的身份验证交互。当然,如果你的登录 shell 不是 bash,login 将调用它而不是 bash。

bash 是一个 shell,它知道它是否被作为登录 shell 调用。bash 登录 shell 会读取 .bash_profile 或 .bash_login 或 .profile — 只读取一个,按优先顺序排列。非登录 shell 不会读取 .profile,但会读取 .bashrc。这是现代 *nix 平台下的正常 bash 行为,但如果您不了解发生了什么,则会导致难以检测到奇怪的行为。

例如,您可以通过终端打开“登录”shell,并获取一组环境变量(例如,从您的 .profile 中获取),然后键入“bash”并获取一组完全不同的变量(从 .bashrc 中获取,加上任何已导出的变量,减去未导出的变量)。特别是,PATH 可能会因重复或缺失条目而变得混乱。

答案2

/usr/bin/login 不是 shell;它是一个用于登录系统的程序。它管理登录系统的过程。作为正确配置的系统的用户,您永远不必担心 /usr/bin/login。如果您对此感到好奇,请阅读

man login

登录过程完成后,将运行 shell。它为用户提供基于文本的命令行界面,以使用操作系统的功能,包括运行其他程序。/usr/bin/bash 是默认 shell 的不错选择。您可以通过执行以下命令了解有关 bash 的更多信息

man bash

两者皆可男人命令可以在 shell 提示符下执行。

答案3

它们是两个截然不同的东西,唯一的共同点是它们通常在用户登录开始时运行,并且都运行配置点文件(.login 和 .bashrc),这些文件本质上是 shell 脚本。此外,与许多现代 shell 一样,bash 还允许您在用户之间切换,这是 bash 的主要目的之一login

详细地:

登录是一个用于登录用户的程序,其末尾执行 shell(又名命令行解释器)。

login 只知道如何做一件事 - 登录用户(使用用户名/密码进行身份验证,设置一些环境变量,如 TERM 和 PATH,并执行几个登录时管理任务 - 有关详细信息,请参阅链接。

Aunix外壳(其中狂欢是一个例子)是一个命令行解释器与脚本解释器的结合,其功能是接受输入(来自用户或以编程方式提供)并执行请求的命令。

据我所知,login 根本不能用作 shell因为它没有命令行解释器的功能。

答案4

/usr/bin/bash

这是在 Mac OS 中内置的 Linux 内核。那么我认为在 Linux 中获取命令时几乎是一样的。默认 shell 应该是 bash。

相关内容