O problema deste post também aconteceu comigo. mkdir trava o bash
Não pude comentar lá porque não tem reputação. Alguém pode elucidar por que isso acontece? Isso acontece em tempo de execução, não quando a função é carregada. Aqui está a pasta do mesmo problema.
md()
{
[ $# -eq 0 ] && { echo "$0 dirname [permissions]"; return; }
[ -d "$1" ] && { echo "%1 already exists!"; return; }
mkdir -m ${2:-0755} -p "$1"
}
"O problema é que eu já tinha um alias como alias md="mkdir" então, quando o bash analisou a nova função bash, ele expandiu md() para mkdir() e a função tornou-se infinitamente recursiva e travou o shell. "
Achei que esse problema foi encontrado corretamente, mas não entendo o raciocínio. Não entendo nenhum motivo possível para a expansão do alias estar direcionando incorretamente a função shell totalmente qualificada. Ao contrário, certo?
Desculpe pelo engano, leia o porquê antes de uma frase de destaque.
Responder1
"Os aliases são, na verdade, apenas macros de substituição de texto - então, quando você tenta definir md() { ... }
após definir, md=mkdir
você realmente acaba com mkdir() { ... }
. Tente imprimir a função defs with declare -p -f md
e declare -p -f mkdir
para ver o que quero dizer." – chave de aço
zi@zi-top:~$ declare -p -f nd
bash: declare: nd: not found
zi@zi-top:~$ declare -p -f mkdir
mkdir ()
{
mkdir -p "$@"
}
zi@zi-top:~$ nd () {
mkdir -p "$@"
}
zi@zi-top:~$ declare -p -f nd
bash: declare: nd: not found
Vejo que o que o steeldriver disse é verdade, acho que é uma decisão arquitetônica estranha, com provavelmente algum tipo de raciocínio no código é text bashism wurl. Obrigado!