Como redireciono a saída para o cd?

11

É possível redirecionar a saída de um comando para cd? Por exemplo, procurei um diretório usando locatee obtive o caminho para ele. Agora, em vez de escrever um cdcaminho, posso redirecionar a locatesaída para cd?

Eu tentei isso:

$ 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
$ 

Sem sorte Provavelmente isso não é particularmente útil, mas estou curioso.

oli206
fonte

Respostas:

16

Você deseja substituição de comando, não redirecionamento:

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

Os bits entre $(e )são executados como um comando e a saída (removida de qualquer nova linha final) é substituída no comando geral.

Isso também pode ser feito com 'back ticks' ("` "):

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

Geralmente, a sintaxe paren-dólar é preferida, pois é mais fácil lidar com situações aninhadas:

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