【问题标题】:How to delete all the environment variables which are inherited from the parent process? [closed]如何删除从父进程继承的所有环境变量? [关闭]
【发布时间】:2013-09-10 05:50:48
【问题描述】:

我想删除所有继承的环境变量,你能告诉我怎么做吗?

【问题讨论】:

  • 找到下一个变量。删除。重复。
  • 删除继承的环境变量,甚至像PATH!
  • 你想达到什么目的?
  • 删除继承的环境变量并加载新的变量,使用execl("/bin/csh","-csh",NULL);

标签: c linux bash environment-variables


【解决方案1】:

要使用 GNU C 库删除 Linux 中的所有环境变量,您可以使用 clearenv()。当此功能不可用时(不在 POSIX 中),您可以改用 environ = NULL。在调用 execl() 或任何变体之前执行此操作。

如果您正在调用一些exec() 变体,您可以使用最后一个参数直接通过调用(以e 结尾的变体)设置环境。使用空环境执行 /bin/csh 的示例:execle("/bin/csh", "-csh", NULL, NULL)

【讨论】:

    【解决方案2】:

    如果要取消设置所有已定义的环境变量,可以执行以下操作:

    for a in $(/usr/bin/env); do 
      unset $(echo "$a" | /usr/bin/cut -d = -f 1);
    done
    

    请注意,这也会取消设置 PATH,因此您可能希望之后使用环境初始化 shell。

    编辑 受@opentokix 启发的较短版本:

    unset $(/usr/bin/env | /usr/bin/cut -d = -f 1 | /usr/bin/xargs)
    

    【讨论】:

    • 由于我必须用c语言运行它,我应该将它作为系统运行它(“unset $(/usr/bin/env | /usr/bin/cut -d = -f 1 | / usr/bin/xargs)") ?
    • 首先,你试过了吗?您会从 system(3) 手册页中得到一个很好的提示,但如果您真的尝试过,您肯定会知道。其次,如果你想要 C 的答案,那么不要用 bash 标记你的问题。
    【解决方案3】:
    unset `env | awk -F= '/^\w/ {print $1}' | xargs`
    

    这可能不是一个好主意,因为它会删除你的路径等。

    您可以使用 unset VARIABLE 取消设置单个变量

    【讨论】:

    • 我运行系统("unset env | awk -F= '/^\w/ {print $1}'|xargs"); execl("/bin/csh","csh","-c","env",NULL);在我的子进程中,但我仍然得到环境变量,你能告诉我原因吗?
    • 您的建议不起作用的原因有很多。首先是@opentokix 代码不起作用。 awk命令错误,应该是awk -F= '{print $1}'
    • @BreakingDawn 它本质上生成一个子shell,清除它的环境变量(子shell!),就是这样。它完全不影响调用进程
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-04-04
    • 2020-09-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多