2 votes

La redéfinition de "cd" provoque une boucle infinie dans bash

J'ai redéfini cd dans mon .bashrc à :

function cd() {
  builtin cd $*
  pwd
}

Cela a fonctionné pendant un certain temps, jusqu'à ce que je fasse une erreur de frappe.

cd *2

comme

cd *(2

Lorsque j'ai fait cela, bash me l'a demandé, j'ai fait "d'oh", et lorsque j'ai saisi ) il est entré dans une boucle infinie.

J'aurais donc dû dire "$@" au lieu de $* dans la définition de la fonction (bien que je ne sois toujours pas sûr de pouvoir expliquer pourquoi). Mais pourquoi cela amènerait-il bash à transcender ce plan terrestre ?

0voto

Todd Gamblin Points 101

A moins que vous ne disposiez d'un répertoire nommé $'2\n' dans votre répertoire actuel, je ne comprends pas.

La syntaxe *(pattern) est un modèle de "globbing étendu" ( ref ) qui renvoie zéro ou plus du motif donné. Étant donné votre motif (a 2 et une nouvelle ligne), je m'attendrais à ce qu'elle renvoie null. Et ensuite, appeler votre fonction sans arguments devrait simplement cd à votre répertoire personnel.

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