我正在写一个shell。
通过execvpe系统调用,我可以运行程序并控制其环境。我需要在这里传递的最小值是多少?
或者,我理解子进程应该有其父进程环境的副本,可能会添加一些值。在测试我的shell时,我从我的终端中的bash、窗口管理器等等中运行它。我可以假设我的环境中有哪些最基本的东西?如果我直接从TTY (据我所知的“最低级别”)运行我的shell,我能期待什么?
发布于 2016-07-08 04:00:45
这是一个非常宽泛的问题。在某种程度上,程序应该能够在没有任何环境的情况下运行。
DISPLAY环境变量提供的,但也可以在命令行上传递。可能还有其他环境变量对“X”程序是必要的(或几乎如此);TERM环境变量。“特殊特性”意味着能够设置颜色(就像ls和grep可以做的,取决于选项),在屏幕上移动(像vivim / 一样),或者甚至知道屏幕的大小(如格林尼治标准时间)和注意,屏幕的大小也可以通过需要知道日期和时间的ROWS和COLUMNS.TZ) -尽管,如果你愿意使用绝对时间(格林尼治标准时间 / . ),你就不需要这个。等。
发布于 2016-07-08 04:04:26
您需要的最低要求是一个有效的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*函数的参数):
参数路径指向标识新进程图像文件的路径名。
参数文件用于构造标识新进程图像文件的路径名。如果file参数包含斜线字符,则file参数应用作此文件的路径名。否则,通过搜索作为环境变量PATH传递的目录来获得该文件的路径前缀(参见XBD环境变量)。如果此环境变量不存在,则搜索结果为implementation-defined.
和(请记住,“文件”指的是文件,而不是execv,因此environ变量适用于使用PATH搜索“文件”参数):
对于那些不包含环境指针(execl(),execv(),execlp(),和execvp()),的表单,新进程映像的环境应从调用进程中的外部变量
中获取。
所以..。从技术上讲,您可以删除整个PATH变量,但结果将是implementation-defined.
发布于 2016-07-08 04:59:34
最低必需环境为空。你什么都不需要。
例如:
$ 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设置了一些变量,但没有继承任何变量。
现在,这样的环境可能会破坏一些东西;例如,缺少TERM变量意味着vi或less可能无法正常工作
$ less foo
WARNING: terminal is not fully functional
foo (press RETURN)因此,实际上,您需要确定您希望在环境中运行的程序以及它们的需求。
https://stackoverflow.com/questions/38261342
复制相似问题