2010-09-24 15 views

cevap

14

Neden sed veya regex? Neden dirname:

parent=`dirname $PWD` 
grandparent=`dirname $parent` 

Düzenleme:

@Daentyh görünüşe $() POSIX uyumlu kabuklarda komut ikamesi için backquotes `` fazla tercih edilir yorumlarda işaret ediyor. Onlarla deneyimim yok. Daha çok bilgi:

http://www.opengroup.org/onlinepubs/009695399/utilities/xcu_chap02.html#tag_02_06_03

Yani, bu sizin kabuk için geçerli olup olmadığını yapabilirsiniz (ki?) Kullanın:

parent=$(dirname $PWD) 
grandparent=$(dirname $parent) 
+0

Bu işe yaradı! – Steve

+2

Bash'ı belirttiğinden beri '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' 'ile kullanmalısınız. – Daenyth

+0

@Daenyth - doğru, soruya gerçekten "bash" özel olmadığı için soruyu (ya da yeniden etiketlememe izin ver) "sh" ya da "kabuk-komut dosyası" na yeniden işaret etmeyi önerdim. @Steve - Ne düşünüyorsun? –

3

neden olmasın

"${PWD}/../.." 

kullanılır?

11

Bu POSIX kabuklarda çalışması gerekir:

echo ${PWD%/*/*} 

size mutlak bir yol yerine göreli bir verecektir hangi.

+1

Yanıt bu olmalı. Bu kabul edilen cevaptan daha çok tekrar kullanılabilir. – melvynkim

0

sed veya regex, ancak bu keyfi ebeveyn miktarı ne yapar değil: Bu örnekte, 5 derin geçici dizine ben cd, n=3 atamak ${PWD} den n seviyeleri yukarı göreli bir yol inşa yılında

$ cd $(mktemp -dp $(mktemp -dp $(mktemp -dp $(mktemp -d)))) && \ 
> n=3 && \ 
> readlink -f ${PWD}/$(for i in $(seq ${n}); do echo -n '../' ; done) 
/tmp/tmp.epGcUeLV9q 

ve -f, --canonicalize sonucu readlink ile.

İlgili konular