Terminal'de sembolik bir bağlantının tamamen çözülmüş yolunu nasıl elde edebilirim?


47

Dizüstü bilgisayarımda karışık python kurulumları var. Yürütülebilir dosyalara bakıyordum /usr/local/binve hepsi sembolik bağlardı.../../../Library......

Bunu çevreleyen bazı garip davranışlar var. Eğer ls -lhaGgörürsem --->ve semboliklerin sağındaki göreceli yolu görüyorum :

lrwxr-xr-x  1 root  wheel    69B Dec  7 22:29 python3 -> ../../../Library/Frameworks/Python.framework/Versions/3.1/bin/python3

Ancak, bu yolu çözmek ve fiili yolu python3 olarak görüntülemek için komut satırı araçlarından hiçbirini göremiyorum. Burada ve orada kullanımı pwd -Pve bunun için findyardımcı programla ilgili bazı bilgiler buldum . Sorun, bunların OS X'te insanların linux üzerinde çalıştıklarını (örneğin sembolik bağın tam yolunu göstererek) tanımladığı gibi çalışmadığıdır. Sadece benim için sembolik bağları yazdırıyorlar:

FantasticMrFox:bin robert$ pwd -P python3
/usr/local/bin
FantasticMrFox:bin robert$ find `pwd -P` -name python3
/usr/local/bin/python3

Burada neler olduğu hakkında bir fikrin var mı?

Yanıtlar:


36

Bunu düşünüyorum pwd -Pve readlinkbu görev için arkadaşlarınız olacak.

GNU’nun readlink - f’sinin bir Mac’teki davranışını nasıl alabilirim? ” Kullanışlı bir kaynaktır.

pwd -P sadece sembolik dizinin içindeyseniz çalışır:

14:07:13 jason@mac ~ $ cd bin
14:08:08 jason@mac bin $ pwd -P
/Users/jason/Applications

readlink hedefi belirleyerek çalışır (bu nedenle dosyalara karşı kullanılabilir):

14:09:03 jason@mac ~ $ readlink bin
Applications

14:09:34 jason@mac ~ $ readlink /var
private/var

Çıktısının belirtilen hedefin ebeveyni ile ilgili olduğu readlinkgörülüyor .

Örn: üst /varolup /, bu private/vargöre, doğru /. Yukarıdaki örneğime göre bin -> Applications, her ikisi de Giriş Dizinimde, nerede çalıştığım önemli değil, çıktı aynı.


3
readlink, sembolik bağın diğer sembolik bağlantılara işaret ettiği durumda tekrar olmaz. Buna "tamamen çözülmüş" demem
James Roth

Bu, OP'nin benzer şeylerle belirtilen şeylere sembolik bağlar sorusuyla çalışmıyor gibi görünüyor ../...
user124384

18

Bu özyinelemeli olarak çözer ve mutlak bir yol döndürür:

$ python
>>> import os
>>> os.path.realpath("/usr/local/bin/python3")

Veya etkileşimli olmayan sürüm:

python -c "import os; print(os.path.realpath('/usr/local/bin/python3'))"

1
Yerleşikler seni başarısızlığa uğrattığında, senaryo yazmasına başvur ... Güzel. Kesinlikle çalışır: $ python -c "import os; print os.path.realpath('bin')">> /Users/jason/Applications. Mac ve * nix sistemlerinde birleşik bir .bash_profile / $ PATH olması için ~ / bin to ~ / Applications komutunu kullanıyorum.
Jason Salaz

1
bu harika ve iyi çalışıyor! Diğer * nix sistemlerinde yapabildiğiniz gibi kabuğunda da bunu yapmanın bir yolu olup olmadığını bilmek istemem dışında cevabı işaretlerdim.
Robert S Ciaccio,

1
Diğer * nix sistemlerinde bunu nasıl yapıyorsunuz? Ayrıca, Python bugünlerde neredeyse evrensel olarak Linux sistemlerine kurulmaktadır.
Jason Salaz

@vxjasonxv Bununla uğraştığım sırada bulduğum şeyler , soruda bahsettiğim pwdve findkomutların OS X dışındaki sistemlerdeki tam yolu çözdüğünü öne sürdü . Onları test etmedim.
Robert S Ciaccio,


1

GNU coreutils-8.15, 2012'de istediğinizi yapan yeni bir komut satırı aracı ekledi realpath: sembolik bağların zincirlerini çözer ve sonucu mutlak (varsayılan) veya göreceli bir yol olarak verir.

Elma henüz içermez realpath(bunlar ne yazık ki bütün GPLv3 araçları kaçma gibi) MacOS içinde, ancak kolayca Homebrew kullanarak örneğin kendiniz yükleyebilirsiniz: brew install coreutils.


-2

Kullanabilirsiniz readlink -f. Tüm bağlantılar üzerinden yeniden kaynaşıyor. Bağlantının, başka bir bağ olan yol olduğunu varsayalım. Son mutlak yola sahip olmak istersiniz.


Ha? Tam olarak ne diyorsun?
Rob

@DINESH SEHRA'nın söylediği şey için doğru sözdizimi read link -f python3örneğin kullanmaktır ve sizin için sembolik bağın tamamını tamponlayacaktır.
Danijel-James W.

3
Açıkçası OS X kullanıcısı tarafından -f, okuma bağlantısının OS X sürümünde hiç bulunmadığı şekilde yayınlanmadı.
sorin
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.