Yinelenen Yollar, .bash_profile ile ilgili sorunlar
PyExifTool'u çalıştırmak için mücadele etmekle ilgili bir soru gönderdikten sonra buraya Stack Overflow'dan yönlendirildim . Bununla birlikte, sorun çok yönlü görünüyordu ve acemi olduğum için burada yardım istemem söylendi.
Esasen sorun bana kaçmam söylendiğinde anlaşıldı ...
bash:~ $ type -all exiftool
geri döndü ...
exiftool is /usr/local/bin/exiftool
exiftool is /usr/local/bin/exiftool
... bir yerlerde kopyalarım olduğunu ortaya çıkarıyor.
Daha sonra koştum ...
bash:~ $ echo $PATH
Hangi geri döndü ...
/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
... kopyalar içeren ve görünüşe göre bitmemesi gereken .bash_profile
Şimdi terminalde, bunu kullanarak temizleyebilirim ...
bash:~ $ PATH=$(echo $PATH | awk -v RS=: -v ORS=: '!($0 in a) {a[$0]; print}')
Yukarıdakiler, Linux Journal'dan aldığım ve 'neredeyse çalışıyor' olması beklenen bir kod parçacığı, ancak 'çalışması gereken' kod parçası bana yardımcı olmuyor gibi görünüyor. 'Neredeyse işlevsel' kodu kullanmak şunları verir:
/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 :
Ben tamamen acemiyim ama bunun bitmesi gerektiğini düşünmüyorum :
ve açıkça .bash_profile
hala mevcut. Ancak, kopyaları kaldırıyor gibi görünüyor, ancak yeni bir terminal penceresi açarsam bu sıfırlanır, bu nedenle yalnızca akut bir çözümdür.
Bash profilim şöyle görünüyor:
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
Bunun alakalı mı yoksa ilgili mi olduğundan emin değilim ama Hotbar'ımdan python başlatıp çalıştırdığımda ...
>>> print(os.environ['PATH'])
Yazdırır
/usr/bin:/bin:/usr/sbin:/sbin
Oysa onu kullanarak IDLE3
onu bash terminalimden başlattığımda geri dönüyor:
/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
Çevresel Bilgi ve Deney:
FSL'yi kurarken muhtemelen bir şeyleri mahvettiğimi, kendime bir şey yaptığımı .bash_profile
ve temel kodlama becerilerini öğrenmeye ve geliştirmeye çalışırken şimdi perili olduğumu düşünüyorum . Belki manuel bir hataydı veya belki de homebrew veya Xcode ile bir ilgisi vardı.
Sonunu silebilirdim .bash_profile
ama zaten yeterince zarar verdim ve kendimi o kadar zahmetli bir soruna gidermek istemiyorum ki hiçbir internet forumuna dokunmak istemiyorum.
Linux Journal'dan Mitch Frazier'e göre çalışması gereken şey buydu . Açıkçası bu onun ya da makalenin bir yansıması değil, benim sınırlı anlayışımla ilgili.
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)}'
Bu geri dönüyor ...
/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$
Aşağıdakileri de denedim ( pepa65 tarafından önerildi ) ...
bash:~ $ PATH=$(n= IFS=':'; for e in $PATH; do [[ :$n == *:$e:* ]] || n+=$e:; done; echo "${n:0: -1}")
Bu geri dönüyor ...
-bash: -1: substring expression < 0
Şunu kullanarak değişiklikleri aramaya çalıştığımda echo $PATH
...
Boş bir satır alıyorum.
Bunun entelektüel olarak uyarıcı olma ihtimalinin düşük olduğunu biliyorum, bu yüzden herhangi bir yardım için minnettarım.
DÜZENLEME 1:
İlk satırımın .bash_profile
sonundan uzaklaşmaya yönelik naif bir girişim, .bash_profile
onun çıktısının echo $PATH
değişmeden kaldığı yerden kaybolmasına neden olmadı .
Yanıtlar
Burada, .bash_profile
yapılandırmanız için tamamen yeterli olan azaltılmış ve düzeltilmiş bir örnek verilmiştir.
Başlangıçta ~/.bash_profile
, aksi takdirde doğru olan bir satıra yanlışlıkla eklenmiş sorunlu bir çizgi vardı. Ancak, beklediğimden ve tanılamanızda önerdiğinden, tüm satırı kaldırdım, zaten sistem tarafından sağlanan varsayılanta olan bir dizin ekliyordu PATH
.
Bir export PATH
kereden fazlasına kesinlikle gerek yoktur ; Muhtemelen kalan bir örneği bile güvenle kaldırabilirsiniz. Bunun anlamı, alt süreçler tarafından görülebilen export
bir ortam değişkenine yapılacak bir değişkeni işaretlemektir . Bunu yaptıktan sonra, alt işlemler değişkenin mevcut değerine erişebilir export
,. Muhtemelen sistem çapındaki kabuk yapılandırmanız bunu PATH
değişken için zaten yapıyor (aksi takdirde amaçlandığı gibi çalışamaz).
Yorumlanan tüm bölümleri kaldırdım; elbette onları geri getirmek ve yorum yapmamak isteyebilirsiniz.
# 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}"
Bu dosya, yeni bir kabuk başlattığınızda okunur, ancak tam olarak ne zaman işletim sistemi satıcınızın Bash'i nasıl yapılandırdığına da bağlı olacaktır. Herhangi bir eski yapılandırmanın artık mevcut yapılandırmanıza müdahale etmediğinden tamamen emin olmak için, yeniden başlamak için oturumu kapatıp tekrar açmanız gerekip gerekmediğini veya yeni bir kabuk veya yeni bir terminal oturumu başlatıp başlatamayacağınızı anlamanız gerekecektir. temiz bir sayfa bul.
Muhtemelen .bash_profile.pysave
saklamak isteyeceğiniz yararlı bir şey içerip içermediğini hala gözden geçirin, ancak bunun son satır grubu dışında mevcut sürümünüzle büyük ölçüde aynı olmasını beklerdim.