最低要求的环境变量是多少?

时间:2016-07-07 19:17:48

标签: shell environment-variables exec

我正在写一个shell。

通过execvpe系统调用,我可以运行程序并控制其环境。我需要在这里通过的最小值是什么?

或者,我理解子进程应该有他们父进程的副本,可能添加了一些值。在测试我的shell时,我是从bash中从我的终端内部从窗口管理器等运行它等等。我可以假设在我的环境中有哪些基本的基础知识?如果我直接从TTY运行我的shell("最低级别"据我所知),我能期待什么?

3 个答案:

答案 0 :(得分:2)

这是一个非常广泛的问题。在某种程度上, 程序应该能够在没有环境的情况下运行。

  • “X”显示(即GUI)程序需要知道 他们应该在哪里展示。 通常会提供此信息 通过DISPLAY环境变量, 但也可以在命令行上传递。 可能还有其他必要的环境变量 (或几乎如此)到“X”程序; 我已经看了很久了。
  • 任何需要使用终端特殊功能的程序 需要TERM环境变量。 “特殊特征”意味着能够设置颜色 (lsgrep可以做,视选项而定), 在屏幕上移动(如vi / vim), 甚至知道屏幕的大小(如less)。 请注意,屏幕的大小也可以使用 通过ROWSCOLUMNS
  • 任何需要知道日期和时间的程序 由用户感知/理解需要知道时区(TZ) - 虽然,如果你愿意绝对(GMT / UTC), 你不需要这个。

答案 1 :(得分:1)

您需要的最小是一个有效的PATH变量。除此之外的任何额外内容取决于您要执行的程序。

POSIX has a list of commonly-used environment variables,很少有程序使用其中的几个。

通常,如果您使用 execvp * ,则不会为可执行文件提供完整路径名。它使您的程序更简单,您不必为每个可执行文件提供完整的路径名,正如 execv 所需。 POSIX将这些功能描述为

 int execv(const char *path, char *const argv[]);
 int execvp(const char *file, char *const argv[]);

和(参考各种 exec * 函数的参数):

  

参数 path 指向标识新过程映像文件的路径名。

     

参数 file 用于构造标识新过程映像文件的路径名。如果 file 参数包含斜杠字符,则 file 参数将用作此文件的路径名。否则,通过搜索作为环境变量 PATH 传递的目录来获取此文件的路径前缀(请参阅XBD环境变量)。如果此环境变量不存在,则搜索结果为 实现定义

和(请记住,“file”指的是execvp而不是execv,因此environ变量适用于使用 {的搜索“file”参数的{1}}

  

对于那些不包含envp指针的表单( PATH execl() execv() ,以及 execlp() ),新过程映像的环境应从调用过程中的外部变量 environ 中获取。

所以......你可以在技术上删除整​​个 execvp() 变量,但结果将是 实现定义

答案 2 :(得分:1)

最小必要环境为空。你不需要任何东西。

e.g。

PATH

我们可以看到$ env -i env $ 创建了一个空白环境。

我们可以更进一步:

env -i

我们可以看到$ env -i /bin/bash sweh@server:/home/sweh$ env LS_COLORS= PWD=/home/sweh SHLVL=1 _=/usr/bin/env 设置了一些变量,但没有任何遗传。

现在这样的环境可能会破坏一些东西;例如缺少bash变量意味着TERMvi 可能无法正常工作

less

所以,实际上,您需要确定您希望在环境中运行的程序以及它们的需求。