Puncte:0

Ciocnirea numelui Funcție Bash/Alias ​​cauzează o eroare Seg

drapel me

Problema din aceasta postare mi s-a intamplat si mie. mkdir blochează bash

Nu am putut comenta acolo pentru că nu am reputație. Poate cineva elucida de ce se întâmplă asta? Se întâmplă în timpul rulării Nu când funcția este încărcată. Aici este pasta problemei identice.

md() 
{  
    [ $# -eq 0 ] && { echo „$0 dirname [permisiuni]”; întoarcere; }
    [ -d „$1” ] && { echo „%1 există deja!”; întoarcere; }
    mkdir -m ${2:-0755} -p „$1”
}

„Problema a fost că am avut anterior un alias precum alias md="mkdir", așa că atunci când bash a analizat noua funcție bash, a extins md() la mkdir() și funcția a devenit infinit recursivă și a prăbușit shell-ul."

Am simțit că această problemă a fost găsită în mod adecvat, dar nu înțeleg raționamentul. Nu înțeleg niciun motiv posibil pentru care extinderea aliasului direcționează greșit funcția shell complet calificată. Inapoi nu?

Îmi pare rău pentru înșelăciune, vă rugăm să citiți de ce înainte de o înștiințare.

drapel hr
Alias-urile sunt de fapt doar macrocomenzi de înlocuire a textului - așa că atunci când încercați să *definiți* `md() { ... }` după definirea `md=mkdir`, ajungeți de fapt cu `mkdir() { ... }`. Încercați să imprimați funcția defs cu `declare -p -f md` și `declare -p -f mkdir` pentru a vedea ce vreau să spun.
Puncte:0
drapel me

„Alias-urile sunt de fapt doar macrocomenzi de înlocuire a textului – așa că atunci când încercați să definiți md() { ... } după definirea md=mkdir cu care ajungi de fapt mkdir() { ... }. Încercați să imprimați funcția defs cu declara -p -f md și declara -p -f mkdir să văd ce vreau să spun.” â steeldriver

zi@zi-top:~$ declara -p -f nd
bash: declara: nd: nu a fost găsit
zi@zi-top:~$ declara -p -f mkdir
mkdir () 
{ 
    mkdir -p „$@”
}
zi@zi-top:~$ nd () {
        mkdir -p „$@”
}
zi@zi-top:~$ declara -p -f nd
bash: declara: nd: nu a fost găsit

Văd că ceea ce a spus Steeldriver este adevărat, cred că este o decizie arhitecturală ciudată, cu probabil că un fel de raționament în cod este text bashism wurl. Mulțumiri!

Postează un răspuns

Majoritatea oamenilor nu înțeleg că a pune multe întrebări deblochează învățarea și îmbunătățește legătura interpersonală. În studiile lui Alison, de exemplu, deși oamenii își puteau aminti cu exactitate câte întrebări au fost puse în conversațiile lor, ei nu au intuit legătura dintre întrebări și apreciere. În patru studii, în care participanții au fost implicați în conversații ei înșiși sau au citit transcrieri ale conversațiilor altora, oamenii au avut tendința să nu realizeze că întrebarea ar influența – sau ar fi influențat – nivelul de prietenie dintre conversatori.