OS X:在我打开终端之前是否启动了任何 shell?

OS X:在我打开终端之前是否启动了任何 shell?

在 OS X 上,我试图理解 shell 的整个概念。具体来说,当我登录计算机但不启动终端时,shell 是否已启动?当我打开终端时,它是否会启动不同类型的 shell?我知道在打开终端之前,我以给定用户身份登录计算机,所以我不明白打开计算机时登录与打开终端时登录之间的区别。

有人能对这一切提供一些见解吗?

答案1

---免责声明:不是苹果用户---

shell 是一个解释一系列命令的程序。这些命令可以来自 STDIN(标准输入)或文件。例如:如果您启动一个bash不带参数的程序,STDIN 将是您的键盘(这是一种简化)。您还可以使用重定向来提供 STDIN,例如:

echo 'echo konijn` | bash

但您也可以使用文件作为输入。例如:如果file.sh包含

#!/bin/bash
echo 'wiep`

你可以用这个脚本明确地启动一个 shell:

bash file.sh

或者,如果文件已被设为可执行文件,则隐式地:

./file.sh

接下来的问题是:什么启动脚本?在 OS X 上,您可以使用 启动脚本launchd,或者在 crontab 中启动脚本,同样是显式或隐式的。

那么,如果我们启动一个终端会发生什么?

您的窗口管理器将启动终端。您的终端将启动您与之对话的 shell。终端的存在只是为了方便您与 shell 交互。

帮助我理解正在发生的事情的是确定哪个进程启动了什么,以及 STDIN 和 STDOUT 到哪里。用于ps -ef确定进程的父进程。

相关内容