2012-04-30 11 views
104

Sé que puedo usar el comando cd para cambiar mi directorio de trabajo en bash.Cambiar temporalmente el directorio de trabajo actual en bash para ejecutar un comando

Pero si hago este comando:

cd SOME_PATH && run_some_command 

A continuación, el directorio de trabajo se cambiará de forma permanente. ¿Hay alguna manera de cambiar el directorio de trabajo de forma tan temporal como este?

PWD=SOME_PATH run_some_command 
+1

por qué no que sea sencillo ** cd SOME_PATH && && cd run_some_command - ** el último comando le llevará de nuevo al último directorio PWD. – Sahil

Respuesta

186

puede ejecutar el cd y el ejecutable en un subnivel encerrando la línea de comandos en un par de paréntesis:

(cd SOME_PATH && exec_some_command) 

Demostración:

$ pwd 
/home/abhijit 
$ (cd /tmp && pwd) # directory changed in the subshell 
/tmp 
$ pwd    # parent shell's pwd is still the same 
/home/abhijit 
+0

Eso invalida el punto de usar 'exec', ¿no crees? – tripleee

+0

@tripleee: Supongo que OP significa ejecutar cualquier ejecutable y no el ejecutivo. – codaddict

+0

no funciona en el archivo de shell –

18

Algo como esto debería funcionar :

sh -c 'cd /tmp && exec pwd' 
+0

yo personalmente cavar esta versión –

+0

todas las respuestas son geniales, pero esto es exactamente lo que estaba buscando – mkrufky

+0

+ corto y dulce !! Gracias –

82

fiesta tiene una orden interna del

pushd SOME_PATH 
run_stuff 
... 
... 
popd 
+3

+1, pushd/popd es ideal para esto. Solo no te olvides de popd antes de salir. – Fr0sT

+11

No necesariamente una buena solución si run_stuff puede fallar (y el script se cierra). Estarías atrapado en SOME_PATH. –

+1

@ ron.rothmanℝℝ no podrías hacer algo como 'pushd PATH; (run_stuff); ps ! = 0]] & & popd; ...; popd' – galois

Cuestiones relacionadas