¿Cómo redirijo la salida a cd?

11

¿Es posible redirigir la salida de un comando a cd? Por ejemplo, busqué un directorio usando locatey obtuve la ruta. Ahora, en lugar de escribir una cdruta, ¿puedo redirigir la locatesalida a cd?

Intenté esto:

$ locate Descargas | grep Descargas$
/home/oliver/Descargas
$ locate Descargas | grep Descargas$ | cd
$ locate Descargas | grep Descargas$ > cd
$ locate Descargas | grep Descargas$ < cd
/home/oliver/Descargas
$ 

Sin suerte. Esto probablemente no sea particularmente útil, pero tengo curiosidad.

oli206
fuente

Respuestas:

16

Desea la sustitución de comandos, no la redirección:

cd "$(locate Descargas | grep -F 'Descargas$')"

Los bits entre el $(y el )se ejecutan como un comando y la salida (despojada de cualquier nueva línea final) se sustituye en el comando general.

Esto también se puede hacer con 'back ticks' (“` ”):

cd "`locate Descargas | grep -F 'Descargas$'`"

La sintaxis dólar-paren generalmente se prefiere porque es más fácil de tratar en situaciones anidadas:

# contrived
cd "$(grep '^dir: ' "$(locate interesting-places | head -1)" | sed 's/^[^ ]*//')"
Chris Johnsen
fuente