2010-09-24 9 views

Respuesta

14

¿Por sed o expresiones regulares? ¿Por qué no dirname:

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

Editar:

@Daentyh señala en los comentarios que al parecer se prefiere $() sobre apóstrofes `` para la sustitución de comandos en conchas compatibles con POSIX. No tengo experiencia con ellos Más información:

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

lo tanto, si esto se aplica a su concha, que puede (debe?) Usan:

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

¡Gracias que funcionó! – Steve

+2

Debería usar '$()' sobre '\' \ '' ya que él especificó bash. – Daenyth

+0

@Daenyth - cierto, en realidad estaba pensando en sugerir que vuelva a hacer la pregunta (o me permita volver a etiquetarla) a 'sh' o' shell-scripting' ya que la pregunta no era realmente 'bash' específica. @Steve - ¿qué piensas? –

3

Por qué no usar

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

?

11

Esto debería funcionar en conchas POSIX:

echo ${PWD%/*/*} 

el cual le dará una ruta absoluta en lugar de una relación.

+1

Esta debería ser la respuesta. Esto es más reutilizable que la respuesta aceptada. – melvynkim

0

No sed o expresiones regulares, pero esto sí hace la cantidad de padres 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 

En este ejemplo, he cd en un directorio temporal 5 de profundidad, asigne n=3, construir una ruta relativa n niveles desde ${PWD} y -f, --canonicalize el resultado con readlink.

Cuestiones relacionadas