2010-09-24 12 views

risposta

14

Perché sed o regex? Perché non dirname:

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

Edit:

@Daentyh sottolinea nei commenti che a quanto pare $() è preferito rispetto apici `` per la sostituzione di comando in gusci POSIX-compliant. Non ho esperienza con loro. Per saperne di più:

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

Quindi, se questo vale per la shell, si può (dovrebbe?) Utilizzare:

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

Grazie, ha funzionato! – Steve

+2

Dovresti usare '$()' su '\' \ '' dato che ha specificato bash. – Daenyth

+0

@Daenyth - vero, stavo davvero pensando di suggerire di ricontestualizzare la domanda (o permettermi di ridisegnarla) su 'sh' o' shell-scripting' dato che la domanda non era specifica di 'bash'. @ Steve - cosa ne pensi? –

3

perché non utilizzare

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

?

11

Questo dovrebbe funzionare in gusci di POSIX:

echo ${PWD%/*/*} 

che vi darà un percorso assoluto piuttosto che un parente uno.

+1

Questa dovrebbe essere la risposta. Questo è più riutilizzabile della risposta accettata. – melvynkim

0

Non sed o regex, ma questo non faccia la quantità genitore arbitraria:

$ 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 

In questo esempio, cd in una directory temporanea 5-profondo, assegnare n=3, costruire un percorso relativo n livelli dal ${PWD} e -f, --canonicalize il risultato con readlink.

Problemi correlati