bash 中的“bash”命令是什么?

bash 中的“bash”命令是什么?

我刚刚bash在 Ubuntu 的终端中输入了命令,一切正常。但之后,我不得不输入两次 exit。bashbash中的命令是什么?

答案1

bash是一个命令解释器、一个 shell、一个带有接口的程序,可以解释您输入的命令。

当您调用bashfrom 时bash,您只需在原始 shell 内部启动一个新 shell。当您退出第二个 shell 时,您将返回到原始 shell。您可以使用该exit命令退出每个 shell。

答案2

shell 和终端仿真器之间存在差异。

Shell 是将您的命令传递给内核并执行的东西。终端仿真程序让您与 shell 进行交互。终端仿真器的示例有gnome-terminalkonsoleshell 有bash、等zshsh在大多数桌面环境中,终端仿真器简称为 Terminal。

打开终端时,它默认使用一个 shell。对于大多数终端来说,默认 shell 是bash。您可以更改默认 shell。首先运行whoami以获取您的用户名。然后运行​​您的用户名在cat /etc/passwd | grep user_name哪里user_name。最后一个字是您的默认 shell。现在您可以使用 更改您的 shell sudo usermod --shell /bin/shell_name user_name

此外,当您键入时,bash它只会打开另一个 shell。您可以通过运行 来简单地退出另一个 shell exit。例如,执行zshsh将带您进入另一个 shell。您可以使用 阅读 shell 的手册页以man shell_name了解 shell 之间的差异。但是手册页非常大且复杂,阅读起来会让您头晕目眩。执行man shell_name | wc -l将为您提供行数。

希望有帮助

答案3

当您在现有 shell 中运行 bash 时,这将启动一个新的 bash shell 作为您正在使用的 shell 的子进程。

您可以使用 ps 命令在 Linux 环境中看到这一点:

    $ ps xjf
 PPID   PID  PGID   SID TTY      TPGID STAT   UID   TIME COMMAND
20282 20286 20282 20282 ?           -1 S    26075   0:00 sshd: john@pts/0
20286 20287 20287 20287 pts/0    32674 Ss   26075   0:00  \_ -bash
20287 32135 32135 20287 pts/0    32674 S    26075   0:00      \_ bash
32135 32674 32674 20287 pts/0    32674 R+   26075   0:00          \_ ps xjf

必须输入两次 exit 才能退出的原因是,第一次 exit 是退出子 bash(此示例中的进程 ID 32135),第二次 exit 是退出原始 bash(此处的 PID 20287)。

如果由于某种原因您想要启动一个新的 bash(或其他 shell),并且知道您不想将控制权返回给原始(父)bash shell,而是想结束会话,则可以通过 exec 命令启动新的 bash,该命令会用新进程替换当前正在运行的 shell。(它实际上保留相同的进程 ID,即使您通过 exec 命令更改为新的 shell(如 ksh):

$ ps -f
UID        PID  PPID  C STIME TTY          TIME CMD
john      3463 20287  0 13:47 pts/0    00:00:00 ps -f
john     20287 20286  0 06:11 pts/0    00:00:00 bash
$ exec ksh
$ ps -f
UID        PID  PPID  C STIME TTY          TIME CMD
john      3471 20287  0 13:47 pts/0    00:00:00 ps -f
john     20287 20286  0 06:11 pts/0    00:00:00 ksh

(请注意,原始 bash 和替换它的 ksh 都有 PID 20287)

通过这种方式使用 exec,当您退出子 bash 时,父级已经消失,因此您将结束会话。

旁注:exec bash 的一个好处是可以更快地注销。

exec 还会使用更少的资源,因为原始 shell 已被替换(与通过启动许多 shell 来消耗资源的 bash fork 炸弹相反)

除了启动 shell 之外,exec 还可以让您通过您的登录名授予其他人访问某些内容的权限,并确保他们退出后不会留在您的 shell 中 - 例如,我去同事的办公桌,以我的身份登录并为他们执行 sudo(某个命令)或执行 ssh(其他地方)。一旦他们结束这些操作,它会关闭他们的终端会话,而不是将他们放回我的登录 shell。(...但不要搞砸登录,否则它会在正常返回到您的 shell 时关闭您的会话)

答案4

虽然迟到了,但在我看来,其他答案并没有切中要点。

bash程序其目的是通过运行其他程序来解释你的命令。它相当复杂——有很多奇特的方法可以构造命令bash——但最簡單您可以输入的命令bash只是其他程序的名称。

如果您foo在命令提示符下键入,bash将搜索名为的程序foo,如果找到,它将运行该程序,等待程序完成,然后打印另一个提示。

那么,猜猜看如果您bash在命令提示符下键入...会发生什么?

相关内容