The coajă este interpretul de linie de comandă care traduce comenzile introduse de un utilizator în acțiuni care urmează să fie efectuate de sistemul de operare. Shell-ul poate fi pornit într-un mod interactiv (unde utilizatorul poate tasta și executa comenzi) sau într-un mod neinteractiv (furcat de script sau program cum ar fi crontab, etc.).
Shell-urile interactive sunt pornite într-un emulator de terminal, care se referă la o aplicație GUI ca gnome-terminal, xterm, etc. sau în TTY care se referă la o consolă de text virtuală. TTY-urile sunt accesibile prin combinația de taste Ctrl Alt F1-9. În distribuțiile desktop ale Linux, mediul desktop rulează într-unul dintre aceste TTY-uri.
Referinte:
Indiferent că este un emulator de terminal sau TTY, ești capabil să faci aceleași lucruri cu shell-ul care rulează înăuntru.
Shell-ul implicit al utilizatorului în Ubuntu este Bash. Există un fișier de inițializare numit .bashrc
care se află în directorul principal al utilizatorului. Acest fișier (împreună cu alte fișiere de inițializare a sistemului ca /etc/bash.bashrc
) este sursă când utilizatorul deschide un nou shell interactiv. Astfel, mediul implicit al utilizatorului este creat.
Literal prin aprovizionare .bashrc
unele dintre variabilele de mediu primesc anumite valori. Astfel de variabile de mediu sunt:
$PATH
care conține căi de sistem separate prin coloane unde ar putea fi găsite fișierele executabile,
$PS1
care determină cum arată promptul tău, de exemplu.: utilizator@gazdă:/current/director$,
$LANG
care setează localul implicit sau $LC_ALL
care suprascrie toate setările locale (sursă din această explicație, citiți mai multe la local de bărbat
).
Deci, dacă doriți să schimbați permanent o variabilă de mediu (în cadrul shell-ului Bash al utilizatorului), puteți modifica (sau setați) valoarea acesteia în .bashrc
. În caz contrar, modificarea va fi valabilă numai pentru instanța curentă a shell-ului.
De exemplu, deschideți un nou terminal și tastați PS1='prompt_changed->'
iar solicitarea dvs. va fi schimbată în acel șir. Apoi păstrați acea fereastră de terminal deschisă și deschideți un nou terminal - veți vedea că această modificare nu este aplicată acolo. Pentru a recupera primul terminal, puteți sursa manual .bashrc
fișier prin comandă . ~/.bashrc
.
Când utilizați export
comanda la care exportați o variabilă în subcochilii care sunt bifurcate din shell-ul curent (cochilii copil), nu către celelalte shell-uri (frați) create de procesele părinte ale shell-ului curent.Iată un exemplu:
utilizator@gazdă:~$ VAR='Bună ziua!' # Definiți o variabilă numită VAR
utilizator@gazdă:~$ echo $VAR # Afișează valoarea variabilei
Buna!
utilizator@gazdă:~$ export VAR # Exportă variabila
utilizator@gazdă:~$ bash # Furnizează un nou shell bash
utilizator@gazdă:~$ echo $VAR # Afișează valoarea variabilei exportate
Buna!
user@host:~$ exit # Ieșire în shell-ul părinte
utilizator@gazdă:~$ sh # Fork nou sh (liniuță) shell
$ echo $VAR # Afișează valoarea variabilei exportate
Buna!
Comanda înv
este folosit pentru a schimba mediul de execuție a unei comenzi sau a unui script. Iată câteva rânduri din man env
:
înv
- setați mediul pentru invocarea unei comenzi. The înv
utilitatea va obține mediul actual, modifica
conform argumentelor sale, apoi invocați utilitarul numit de
operandul de utilitate cu mediul modificat.
-i
Invocă utilitatea cu exact mediul specificat de argumente; mediul moștenit va fi ignorat complet.
Următoarea comandă: env -i PATH=/mybin mygrep xyz myfile
invocă comanda mygrep
cu un nou CALE
valoare ca singura intrare în mediul său. În acest caz, CALE
este folosit pentru a localiza mygrep
, care apoi trebuie să locuiască în /mybin
.
înv
este adesea folosit la începutul scripturilor (în cadrul așa-numitului shebang) pentru a le crește portabilitatea. Iată două subiecte care acoperă această utilizare:
Când rulează fără argumente, înv
comanda scoate o listă a variabilelor de mediu.
Încă o dată, .bashrc
fișierul din directorul de start personaliza funcțiile shell-ului, cum ar fi crearea sau modificarea variabilelor și alias-urilor și definirea funcțiilor.
De exemplu, să definim următoarea funcție în partea de jos a fișierului .bashrc
fişier.
salut() { echo "Bună ziua, ${USER^}!"; }
După salvarea fișierului, puteți să-l sursei sau să deschideți o nouă instanță de terminal și să tastați Buna ziua
.
spas@gazdă:~$ salut
Salut, Spas!
Deci putem vedea că această funcție (sau variabilă sau alias) este disponibilă în shell-ul curent. În această etapă se numește local funcție (sau variabilă sau alias), deci dacă inspectăm mediul prin env | grep salut
funcția noastră nu va fi acolo.
Variabilele locale există numai în shell-ul curent și nu pot afecta alte comenzi sau aplicații.
După definirea unei funcții (variabilă, alias) în .bashrc
îl putem exporta pentru a-l face disponibil pentru subshell-urile (comenzi sau scripturi) bifurcate din shell-ul curent - astfel devine global sau mediu inconjurator funcție (variabilă, alias).
salut() { echo "Bună ziua, ${USER^}!"; }
export -f salut
spas@host:~$ sursă ~/.bashrc # în bash 'sursă' este sinopsis la '.'
spas@host:~$ env | grep „hello” # analiza „hello” în ieșirea lui „env”
BASH_FUNC_hello%%=() { echo "Bună ziua, ${USER^}!"
spas@host:~$ bash -c 'hello' # furcă un subshell neinteractiv
Salut, Spas! # și executați funcția din interior
Rețineți că shell-urile neinteractive, în cele mai multe cazuri, nu generează implicit fișierele de inițializare ca .bashrc
, astfel încât mediul lor este limitat decât mediul shell-urilor interactive.
De exemplu, atunci când proiectați un script care va fi folosit de crontab trebuie să utilizați căi complete către comenzi sau să vă asigurați că are mediul necesar.