usando xargs para cd em um diretório

19

Sentindo-se como um idiota agora. Por que isso não funciona?

echo "/some/directory/path" | xargs -n1 cd
    
por Ian Lotinsky 03.11.2010 / 20:14

2 respostas

17

O pipe executa xargs em um subprocesso e xargs executa cd em um subprocesso. As alterações em um subprocesso não são propagadas para o processo pai.

    
por 03.11.2010 / 20:16
18

O comando cd é embutido porque as informações sobre o diretório atual estão vinculadas a um processo e somente o shell embutido pode alterar o diretório atual do shell em execução.

Existem dois problemas com o seu código:

  1. xargs não pode executar cd porque cd é um comando interno e xargs pode executar somente arquivos executáveis.
  2. Mesmo que você execute cd em um subprocesso chamado de xargs , ele não terá nenhum efeito no processo pai, conforme explicado acima.

A solução é executar um sub-shell, dentro dele executar cd e então você pode executar comandos no novo diretório atual.

ls | xargs -L 1 bash -c 'cd "$0" && pwd && ls'
    
por 14.01.2014 / 08:55

Tags