执行source~ / .bashrc后,路径变量变得越来越长

时间:2016-02-18 19:33:48

标签: bash

这可能是一个愚蠢的问题,但我想知道如何避免这个问题。

在我的〜/ .bashrc文件中,我添加了一些本地路径。以下是PYTHONPATH的示例。在我的工作环境中,我需要不时地执行“source~ / .bashrc”,并且下面的PYTHONPATH变得越来越长,这非常烦人。

如果我可以将它附加到“干净”的PYTHONPATH,那么它可能会更好,而不是附加到现有的PYTHONPATH。无论如何这样做?

export PYTHONPATH=$PYTHONPATH:$CLIENTS:$EXPERIMENTAL/my_pythonlib:/mnt/src/cloud/chanwcom/chanwcom-speech/mnt/experimental/users/chanwcom/bin:$CK_MEDIA_FRAMEWORK

2 个答案:

答案 0 :(得分:1)

编辑:我回答了关于保持清洁路径的问题 @ mklement0正确评论说,OP正在谈论PYTHONPATH。 我可以纠正我的答案,但也许其他读者对PATH也有同样的问题 亲爱的Chanwcom,你可以使用下面的方法,你只需要重命名变量。

在扩展路径之前添加一些测试。选择其中一个示例。

if [[ -z "${my_clean_path}" ]]; then
   my_clean_path="${PATH}"
fi
# some more commands
PATH="${my_clean_path}:${PYTHONPATH}"

if [[ -z "${python_added}" ]]; then
   PATH="${PATH}:${PYTHONPATH}" # PATH += also possible here
fi

或(我最喜欢的,没有其他变量)

if [[ "${PATH}" != *${PYTHONPATH}* ]]; then
   PATH="${PATH}:${PYTHONPATH}" # PATH += also possible here
fi

或在更改路径之前打开第二个shell。退出到第一个shell并打开一个新的shell。

答案 1 :(得分:1)

解决此问题的“正确”方法是评论中提到的chepner - 修改PYTHONPATH中的.bash_profile,它在登录时运行,而不是在运行的.bashrc中运行对于每个shell。

如果您无法调整将重复项附加到路径的脚本或工具,则可以通过删除非唯一值来清理内容。

这是我使用的策略,它涉及将$ PATH转换为数组,反转数组(即将数组值转换为关联数组的下标),然后从数组索引重建路径:

if [[ ${BASH_VERSINFO[0]} -ge 4 ]]; then
        path_a=( ${PATH//:/ } )
        declare -A path_b=()
        for i in ${path_a[@]}; do path_b[$i]=1; done
        IFS=: eval 'PATH="${!path_b[*]}"'
fi
export PATH

您可以轻松地为PYTHONPATH调整此值。

请注意,关联数组是在Bash版本4中引入的,因此它们可能不适用于OSX中的默认bash。不过,你应该对其他任何现代的都很好。

另请注意,如果路径中的任何目录包含冒号,此解决方案将会中断。但是,无论如何,我认为你的道路将被打破。

另外,请注意此解决方案使用eval,有些人认为这是危险的,不干净的,有臭味的。但是,在正确的环境中,它可以是一种很好的奶酪。