重复路径,.bash_profile 问题

重复路径,.bash_profile 问题

发帖后我从 Stack Overflow 被引导到这里一个问题关于如何努力让 PyExifTool 工作。然而,问题似乎是多方面的,作为一个新手,我被告知要在这里寻求帮助。

本质上,当我被告知要运行时,问题就被意识到了......

bash:~ $ type -all exiftool

返回...

exiftool is /usr/local/bin/exiftool
exiftool is /usr/local/bin/exiftool

...发现我在某个地方有重复项。

随后,我跑...

bash:~ $ echo $PATH

哪个返回...

/Library/Frameworks/Python.framework/Versions/3.8/bin:/usr/local/fsl/bin:/usr/local/bin:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:/opt/X11/bin~/.bash_profile

...其中包含重复项,显然不应以.bash_profile

现在在终端中,我可以使用...清理它

bash:~ $ PATH=$(echo $PATH | awk -v RS=: -v ORS=: '!($0 in a) {a[$0]; print}')

上面是我从中得到的一个片段Linux 杂志这应该“几乎可以工作”,但“应该工作”的代码似乎对我没有帮助。使用“几乎可用”的代码给出以下结果:

/Library/Frameworks/Python.framework/Versions/3.8/bin:/usr/local/fsl/bin:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:/opt/X11/bin~/.bash_profile :

我是一个完全的新手,但我认为它不应该结束:并且显然.bash_profile仍然存在。然而,它似乎确实删除了重复项,尽管如果我打开一个新的终端窗口,这会重置,所以这只是一个紧急的解决方法。

这就是我的 bash 配置文件的样子:

export PATH=/usr/local/bin:$PATH~/.bash_profile

# Setting PATH for Python 3.6
# The original version is saved in .bash_profile.pysave
#PATH="/Library/Frameworks/Python.framework/Versions/3.6/bin:${PATH}"
#export PATH

# Setting PATH for Python 2.7
# The original version is saved in .bash_profile.pysave
#PATH="/Library/Frameworks/Python.framework/Versions/2.7/bin:${PATH}"
#export PATH


# FSL Setup
FSLDIR=/usr/local/fsl
PATH=${FSLDIR}/bin:${PATH}
export FSLDIR PATH
. ${FSLDIR}/etc/fslconf/fsl.sh


# Setting PATH for Python 3.8
# The original version is saved in .bash_profile.pysave
PATH="/Library/Frameworks/Python.framework/Versions/3.8/bin:${PATH}"
export PATH

我不确定这是否相关,但是当我从 Hotbar 启动 python 并运行时...

>>> print(os.environ['PATH'])

它打印

/usr/bin:/bin:/usr/sbin:/sbin

而当我使用它从 bash 终端启动它时,IDLE3它会返回:

/Library/Frameworks/Python.framework/Versions/3.8/bin:/usr/local/fsl/bin:/usr/local/bin:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:/opt/X11/bin~/.bash_profile

周边信息及实验:

我想我可能在安装 FSL 时搞砸了一些事情,对我做了一些事情.bash_profile,现在在尝试学习和发展基本编码技能时被困扰。也许这是一个手动错误,或者可能与自制程序或 Xcode 有关。

我可以删除.bash_profile结局,但我担心我已经造成了足够的损害,并且不想自己解决一个如此费力的问题,没有互联网论坛愿意触及它。

这应该是按照Linux 杂志的米奇·弗雷泽 (Mitch Frazier)。显然,这不是对他或这篇文章的反映,而是对我有限理解的反映。

bash:~ $ export PATH=/Library/Frameworks/Python.framework/Versions/3.8/bin:/usr/local/fsl/bin:/usr/local/bin:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:/opt/X11/bin~/.bash_profile
bash:~ $ echo -n $PATH | awk -v RS=: '!($0 in a) {a[$0]; printf("%s%s", length(a) > 1 ? ":" : "", $0)}'

这返回...

/Library/Frameworks/Python.framework/Versions/3.8/bin:/usr/local/fsl/bin:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:/opt/X11/bin~/.bash_profileUser's-MBP:~ username$

我还尝试了以下方法(由佩帕65)...

bash:~ $ PATH=$(n= IFS=':'; for e in $PATH; do [[ :$n == *:$e:* ]] || n+=$e:; done; echo "${n:0: -1}")

这返回...

-bash:  -1: substring expression < 0

echo $PATH当我尝试使用...寻找更改时

我得到一个空行。

我知道这不太可能刺激智力,所以我很感激任何帮助。

编辑1:

.bash_profile从 my 第一行末尾删除的天真尝试并没有使它从保持不变的.bash_profile输出中消失。echo $PATH

答案1

这是经过简化和更正的.bash_profile,希望足以适合您的配置。

开头有一个有问题的行,~/.bash_profile被错误地添加到原本正确的行中。但是,我删除了整行,因为我期望并且您的诊断表明它添加了一个已经位于系统提供的 default 目录中的目录PATH

绝对不需要export PATH多次;也许您甚至可以安全地删除剩下的一个实例。的含义export是标记一个变量,使其成为环境对子流程可见的变量。完成此操作后,子进程将可以访问变量的当前值,即使该值在export.很可能您的系统范围 shell 配置已经为该PATH变量执行了此操作(否则它无法按预期工作)。

我删除了所有被注释掉的部分;您当然可能想将它们带回来并取消注释。

# FSL Setup
FSLDIR=/usr/local/fsl
PATH=${FSLDIR}/bin:${PATH}
export FSLDIR PATH
. ${FSLDIR}/etc/fslconf/fsl.sh

# Setting PATH for Python 3.8
# The original version is saved in .bash_profile.pysave
PATH="/Library/Frameworks/Python.framework/Versions/3.8/bin:${PATH}"

当您启动新 shell 时会读取此文件,但具体时间还取决于操作系统供应商如何配置 Bash。为了完全确定任何旧配置不再干扰您当前的配置,您必须确定是否需要注销并重新登录才能重新开始,或者您是否可以简单地启动一个新的 shell 或一个新的终端会话来重新启动。重新开始。

也许仍会检查是否.bash_profile.pysave包含您想要保留的有用内容,尽管我希望它与您当前的版本大体相同,除了最后一组行之外。

相关内容