42 votes

En utilisant xargs pour cd vers un répertoire

Se sentir comme un idiot en ce moment. Pourquoi cela ne fonctionne pas?

echo "/some/directory/path" | xargs -n1 cd

35voto

Ignacio Vazquez-Abrams Points 107432

Le pipe exécute xargs dans un sous-processus, et xargs exécute cd dans un sous-processus. Les modifications dans un sous-processus ne sont pas propagées au processus parent.

32voto

La commande cd est une commande intégrée car les informations sur le répertoire courant sont liées à un processus et seule une commande intégrée au shell peut changer le répertoire courant du shell en cours d'exécution.

Il y a deux problèmes avec votre code:

  1. xargs ne peut pas exécuter la commande cd car cd est une commande intégrée et xargs ne peut exécuter que des fichiers exécutables.
  2. Même si vous exécutez cd dans un sous-processus appelé par xargs, cela n'aura aucun effet sur le processus parent comme expliqué ci-dessus.

La solution est d'exécuter un sous-shell, à l'intérieur exécuter cd et ensuite vous pouvez exécuter des commandes dans le nouveau répertoire courant.

ls | xargs -L 1 bash -c 'cd "$0" && pwd && ls'

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X