Linux - de ce "cd" nu funcționează în scriptul bash shell, cod q - un rus (en)

Shell script-urile sunt executate în subshell, și fiecare subshell are propria sa concepție despre ceea ce este directorul curent. cd se descurcă bine, dar de îndată ce subshell-ul iese, te-ai întors în shell-ul interactiv și nimic nu sa schimbat acolo.







O modalitate de a obține acest lucru este să folosiți aliasul în schimb:

Nu faceți nimic! Ați schimbat directorul, dar numai în interiorul subshell-ului care execută scriptul.

Puteți rula scriptul în procesul curent folosind comanda dot:

Dar aș prefera sugestia lui Greg de a folosi un pseudonim în acest caz simplu.

Cd-ul din script-ul dvs. a funcționat tehnic, deoarece a schimbat directorul shell în care a fost executat scriptul, dar a fost un proces separat care a fost vizibil din shell-ul dvs. interactiv.

Modul compatibil Posix pentru a rezolva această problemă este de a defini procedura shell-ului, mai degrabă decât scriptul de linie de comandă.

Puteți să îl introduceți sau să îl plasați într-unul din fișierele de pornire a shell-ului.

Pentru a crea un script bash care va fi scris în directorul cd:







Creați fișierul de script

Apoi creați un alias în fișierul de pornire.

  • Am creat un fișier de pornire în care am resetat toate aliasurile și funcțiile personalizabile.
  • Apoi, trimit acest fișier la .bashrc meu, astfel încât să fie instalat de fiecare dată când îl descarc.

De exemplu, creați un fișier alias / funcții de bază: /scripts/mastercode.sh
(Puneți aliasul în acest fișier.)

Apoi, la sfârșitul fișierului .bashrc.

Acum este ușor să scrieți în directorul java, doar tastați cdjava și sunteți acolo.

cd este executat în shell shell. Când se încheie scenariul, această coală iese și apoi rămâneți în directorul în care erați. "Sursa" a scriptului, nu îl rulați. În loc de:

(Rețineți perioada și spațiul înaintea numelui scriptului.)

Ideea lui Jeremy Ruten de a folosi o legătură simbolică a fost evocată de un gând care nu a trecut de nici un alt răspuns. Utilizare:

Colonul principal este important; Aceasta înseamnă că dacă există un director "dir" în directorul curent, atunci "cd dir" se va schimba la acest lucru, în loc să se sară în altă parte. Cu valoarea setată, după cum se arată, puteți face:

Și dacă în directorul curent nu există niciun subdirector Java, acesta vă va transfera direct în $ HOME / projects / java - nu există pseudonime, nu există scripturi, nu există comenzi punctuale sau executabile.

$ HOME - / Utilizatori / jleffler; $ CDPATH:

Am codul meu de a lucra folosind. .

/ doza nu funcționează, deoarece nu schimbă directorul în terminal, ci doar modifică directorul specific acestui script.

Iată programul meu

Aici e terminalul meu







Articole similare

Trimiteți-le prietenilor: