题
我有一个C程序,可以打印每个环境变量,其名称由stdin给出。 它输出$ PATH,$ USER等变量,但看不到我在Linux shell中定义的环境变量... 例如,在bash中,我定义了my= 4,当我输入“ my”时,我希望程序返回4。 通用标签
我该怎么做才能改善getenv的结果? 我希望它向我展示所有环境变量以及Linux shell的所有继承。 谢谢你。
解决方案
有两种方法:
-
my=4; export my; ./program
-
my=4 ./program
-
env my=4 ./program
每种方法的效果相同,但机制不同。
-
此方法特定于您所使用的shell,尽管在大多数典型的shell中它都是这样工作的(Bourne shell变体; csh派生的shell再次有所不同)。首先设置一个 shell变量,然后将其导出到一个 environment变量,然后运行您的程序。在某些外壳上,您可以将其缩写为
export my=4
。程序运行后,该变量将保持设置状态。 -
此方法还取决于您的shell。这将为执行
my
临时设置./program
环境变量 。运行后,my
不存在(或具有其原始值)。 -
这将在运行程序之前使用
env
程序设置环境变量。此方法不依赖于任何特定的shell,并且是最可移植的。与方法2一样,这会临时设置环境变量。实际上,shell甚至都不知道已设置了my
。
-
其他提示
如果您没有对其生成代码,那么它只是一个shell变量,而不是环境变量。使用export
或export my=4
。
这与C或getenv
无关。如果在外壳中执行了my=4
,则已定义了本地外壳变量。要使其成为环境变量,请执行export my
。
不隶属于 StackOverflow