Linux 终端程序如何为 shell 程序设置环境

Linux 终端程序如何为 shell 程序设置环境

我正在用 Rust 编写一个终端模拟器。源代码是这里。它分叉自身并且子进程(最终)成为 shell 程序,从中读取输出并将输入传递给该 shell 程序。

在 macOS 上,我所做的是执行login -f adam(我的用户名是 adam),然后它运行并生成设置了 env 的 shell 程序。

在 Linux 上,我无法做到这一点。login在 Linux 上需要sudo。当您启动普通的 Linux 终端程序时,它不会要求您输入密码才能执行sudo,因此一定是别的原因。我看到 Zsh 有一个-l标志使其成为“登录 shell”。这不会设置像这样的重要环境变量$PATH

请参阅此截图:

左边是sudo login -f adam——几乎正确,但它让我输入密码。

正确的是/usr/bin/zsh -l。它不要求我输入密码,但是没有设置$PATH或重置$PWD/home/adam,以及许多其他事项。

所以我的问题是,在不执行二进制文件的情况下,普通的 Linux 终端程序如何xterm启动并设置所有的环境等login

相关内容