bash - 按照设置的顺序打印env变种

时间:2014-06-10 19:48:29

标签: linux bash

这个问题与bash shell有关

首先,我知道如何查看当前设置的env变种。

我想知道如何按照设置的顺序列出当前设置的环境变量。有点喜欢" ls -lt"但对于env vars。

这可能吗?

编辑:很多人都在问我为什么需要这个。

我做了很多调试,代码移植,修复等。它要求我尝试不常写得很好的第三方代码。在成功构建的过程中,我可能需要设置,覆盖一些env变量。我很擅长记录我在做什么,所以我可以回溯我的步骤。但有时我会忘记或错过记录我的步骤。

出于很好的理由,我们的环境有很多环境。

我可以在那一刻抓住整个环境变速器,但这对我没什么帮助。如果bash有办法按照设置的顺序列出env变种,我可以清楚地识别我设置的内容。

另外,我同意bash没有理由跟踪这个。但是我希望它有一个内部堆栈的env变量,它会自动按照后进先出的顺序排序。但我想这太过乐观了。

感谢大家。

1 个答案:

答案 0 :(得分:3)

正如@pmos在评论中建议的那样,您可能能够破解一些shell函数,这些函数会在您导出内容时手动跟踪,但shell本身无法执行此操作。这就是原因。导出使名称可用于环境。这仅对exec*e函数族有意义。换句话说,export实际上只对遵循标准fork/exec模式的新流程有意义。但这也意味着保存导出名称的数据结构不是shell,而是POSIX C.这是documentation about exec environments的一个片段:

  

参数envp是一个到以null结尾的字符串的字符指针数组。这些字符串应构成新过程映像的环境。 envp数组由空指针终止。

  

extern char **environ;被初始化为指向环境字符串的字符指针数组的指针。

假设流程按顺序向环境添加字符串似乎是合理的,但事实上它似乎并没有真正起作用,而且POSIX系统也像它们一样复杂,它们做了很多事并不奇怪设置,重置和取消设置。

尽管你的问题集中在环境变量上,但你的短语让我觉得你也有兴趣跟踪变量何时获得set,这与他们获得{{1}时的情况不同}编辑。实际上 完全是shell的问题,但是唉,bash(至少)似乎也不跟踪它。

export似乎按字母顺序显示名称。我甚至无法弄清楚外部set命令的显示顺序。