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.
Sentindo-se como um idiota agora. Por que isso não funciona?
echo "/some/directory/path" | xargs -n1 cd
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:
xargs
não pode executar cd
porque cd
é um comando interno e xargs
pode executar somente arquivos executáveis. 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'