发帖后我从 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
包含您想要保留的有用内容,尽管我希望它与您当前的版本大体相同,除了最后一组行之外。