redefinição “cd” causa loop infinito no bash

2

Eu redefined cd no meu .bashrc para:

function cd() {
  builtin cd $*
  pwd
}

Isso funcionou por um tempo, até eu digitar errado

cd *2

como

cd *(2

Quando fiz isso, o bash me perguntou, eu dei "d'oh" e, quando entrei no ) , ele entrou em um loop infinito.

Tão bem, eu deveria ter dito "$@" em vez de $* na definição da função (embora eu ainda não tenha certeza se eu poderia explicar o porquê). Mas por que isso faria com que a festa transcendesse esse plano terreno?

    
por Jamie Andrews 04.03.2015 / 20:30

1 resposta

0

A menos que você tenha um diretório chamado $'2\n' em seu diretório atual, eu não o entendo.

A sintaxe *(pattern) é um padrão "extended globbing" ( ref ) que retorna zero ou mais do padrão dado. Dado seu padrão (a 2 e uma nova linha), esperaria que retornasse null. E, em seguida, chamar sua função sem argumentos deve simplesmente fazer um cd para o seu homedir.

    
por glenn jackman 04.03.2015 / 20:49