【问题标题】:Unset all environment variables in C-Shell取消设置 C-Shell 中的所有环境变量
【发布时间】:2018-10-22 03:44:58
【问题描述】:

我想通过 C-shell 脚本取消设置所有环境变量。 使用unsetenv * 命令,我可以使用命令行来做到这一点。 我们怎样才能让它在我们的脚本中工作? 当我运行脚本时,我正在点击undefined identifier issue

【问题讨论】:

  • 你的目标是什么?取消设置 all 环境变量可能会破坏(例如考虑HOMEUSER 等)
  • 它对我有用。请在您的问题中包含脚本。在我的系统上,unsetenv * ; /usr/bin/env | wc 在命令行或脚本中在 csh 和 tcsh 下打印 `0 0 0`。 (同样,取消设置所有环境变量不太可能有用。)
  • 我不相信您的问题可以在当前状态下得到回答。请更新它以显示minimal reproducible example(请阅读链接文章)。你用的是csh还是tcsh?除了脚本的精确副本,请包括错误消息的精确复制和粘贴(tcsh 没有包含“标识符”一词的消息,而 csh 可能也不包含)。

标签: linux shell csh


【解决方案1】:

来自tcsh(1)

   unsetenv pattern
           Removes  all  environment  variables whose names match pattern.
           `unsetenv *' thus removes all environment variables; this is  a
           bad idea.  It is not an error for nothing to be unsetenved.

所以使用unsetenv * 应该工作。您可能有一个不支持此功能的(可能是旧的)(t)csh 版本?

不管怎样,正如手册页所说,取消设置 everything 可能是个坏主意。您将希望保留各种变量,例如 HOMEUSER 和其他一些变量。更好的方法可能是:

foreach e (`env`)
    set name = `echo "$e" | cut -d "=" -f 1`

    # Note: this list should be longer.
    if ( "$name" != "HOME" ) then
        unsetenv "$name"
    endif
end

【讨论】:

  • unsetenv 是一个内置命令,它不应用普通的通配符规则。 unsetenv * 不带引号将取消设置所有环境变量。你可以在 tcsh 中引用它(在 csh 中引用它使它什么都不做)。
  • 嗯,看来你是对的@KeithThompson。我只是假设这是没有先测试的问题。哎呀!感谢您指出了这一点。我认为foreach 循环仍然有用,所以我改变了答案。
  • 我没有查看历史记录,但我认为没有任何旧版本的 csh,尤其是 tcsh,不能正确处理 unsetenv *。我认为 OP 只是错误地说明了实际问题是什么。请参阅我对该问题的最新评论。
  • IF 语句如何转换成列表,能否添加另一个示例 var 忽略?
猜你喜欢
  • 2021-11-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-02-26
  • 2018-06-27
  • 2013-09-04
  • 1970-01-01
  • 2014-07-15
相关资源
最近更新 更多