【问题标题】:How to delete redundant environment variables in MacOS?如何在 MacOS 中删除多余的环境变量?
【发布时间】:2014-08-12 12:11:11
【问题描述】:

我有我的路

~/desktop/Ruby » echo $PATH

结果

/Users/zhang/.rvm/gems/ruby-2.1.2/bin:/Users/zhang/.rvm/gems/ruby-2.1.2@global/bin:/Users/zhang/.rvm/rubies /ruby-2.1.2/bin:/usr/local/bin:/usr/local/bin:/Users/zhang/.rvm/gems/ruby-2.1.2/bin:/Users/zhang/.rvm/gems /ruby-2.1.2@global/bin:/Users/zhang/.rvm/rubies/ruby-2.1.2/bin:/opt/local/bin:/opt/local/sbin:/usr/bin:/bin :/usr/sbin:/sbin:/usr/local/bin:/opt/X11/bin:/Applications/Server.app/Contents/ServerRoot/usr/bin:/Applications/Server.app/Contents/ServerRoot/usr /sbin:/usr/local/git/bin:/usr/local/MacGPG2/bin:/Users/zhang/.rvm/bin:/Users/zhang/.rvm/bin:/Users/zhang/.rvm/bin

我的路径中有很多冗余,也许我的 bash 中有“PATH=$PATH:.....”之类的东西,但我没有找到它..

所以
1. 如何删除 macOS 中多余的环境变量?
2.当我添加路径时,如何确保没有重复的环境可行?
3. 如何让多余的路径只出现一次?

【问题讨论】:

  • @Max 我很感兴趣 - 在什么情况下重复比较好?
  • 您可能不知道 /etc/paths 也设置了您的 PATH。
  • 好吧,我关心我,因为我是处女座..哈哈。我也很困惑在哪种情况下可以重复。 @Max

标签: bash rvm environment-variables


【解决方案1】:

如何消除现有的重复项?

使用一些标准的 Unix 工具(我希望其中大部分都可以在 OS X 上使用),您可以消除这样的重复。请注意,其中一些工具在OS X 上的工作方式可能略有不同,但这些命令应稍作调整即可工作。我只在 Linux 上进行了测试,因为我目前无法访问 OS X

PATH=`echo $PATH | sed 's/:/\n/g' | sort | uniq | paste -s --delimiters=":"`

如果您在PATH 的不同部分有同一个二进制文件的多个版本,这可能会产生对您的PATH 进行排序的不幸副作用。

为了避免这种副作用,我们可以借用this answer的一个技巧,对uniq进行不排序。

PATH=`echo $PATH | sed 's/:/\n/g' | awk ' !x[$0]++' | paste -s --delimiters=":"`

如何避免向PATH 变量添加冗余路径?

使用many answers 中的String contains in bash 之一检查PATH 是否已包含您要添加的路径。

if [[ $PATH != *newpath* ]]
then
   export PATH=$PATH:newpath
fi

【讨论】:

  • ~ » source ~/.bashrc zhang@zt-mac paste: 非法选项 -- - 用法: paste [-s] [-d delimiters] file ... /Users/zhang/.rvm /scripts/rvm:12: command not found: uname /Users/zhang/.rvm/scripts/rvm:14: command not found: ps git_prompt_info:1: command not found: git @merlin2011 这是我启动你的结果解决方案。
【解决方案2】:

我自己的$HOME/.profile文件的最后一行:

eval $(perl -e 'printf qq{export %s="%s";}, $_, join(":", grep { -d $_ && !$seen{ $_ }++ } split /:/, $ENV{$_}), $_ for( qw(PATH MANPATH) );')

它:

  • 将环境变量 PATH 和 MANPATH 清理为
    • 删除重复项
    • 删除不存在的目录
  • 创建新的export PATH="... cleaned up path ..."
  • 将新的 PATH 重新初始化为 MANPATH

用于测试:将eval 替换为echo 以显示具体在做什么

【讨论】:

    猜你喜欢
    • 2011-10-16
    • 2022-01-14
    • 2021-04-28
    • 2014-07-11
    • 2021-05-06
    • 2015-11-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多