Nasıl bir kabuk içinde sembolik bağları çözmek için
Mutlak veya göreceli bir yol (Unıx-benzeri bir sistem) dikkate alındığında, hedefin tam yolunu belirlemek için herhangi bir ara sonra sembolik bağları çözmek istiyorum. Bonus da ~kullanıcı adı gösterimi aynı zamanda çözmek için puan.
Eğer hedef bir dizin olabilir mümkün chdir() içine dizin ve arama getcwd(), ama gerçekten yapmak istiyorum bu bir kabuk yerine yazılı bir C Yardımcısı. Ne yazık ki, kabukları kullanıcı (bu OS X bash) sembolik varlığını gizlemek için denemek için bir eğilim var:
$ ls -ld foo bar
drwxr-xr-x 2 greg greg 68 Aug 11 22:36 bar
lrwxr-xr-x 1 greg greg 3 Aug 11 22:36 foo -> bar
$ cd foo
$ pwd
/Users/greg/tmp/foo
$
Benim istediğim bir işlevi gidermek() gibi o zaman idam dan tmp dizini yukarıdaki örnekte, gidermek("foo") == "/Kullanıcı/greg/tmp/bar".
CEVAP
readlink -f $path
Not GNU coreutils 8.15 beri (2012-01-06), bir yokturrealpathprogram kullanılabilir, daha az kalın kafalı ve yukarıda daha esnektir. Ayrıca aynı adı taşıyan FreeBSD açıklama ile uyumludur. Ayrıca iki dosya arasındaki göreceli yolu oluşturmak için işlevsellik içerir.
realpath $path
[Ayrıca aşağıdahalloleo —danorton] yorum tarafından Admin
Mac OS X için (en az 10.8.x), 7 ** -f
seçeneği olmadan:
readlink $path
nasıl kabuk içinde bir dize bölmek ve ...
Nasıl çift tıklayarak OS X içinde bir ...
Hata: &; INSERT EXEC deyimi iç içe olm...
Nasıl bu kadar bash bir kabuk içinde b...
Nasıl bir proje içinde tek bir dosya i...