Puncte:1

Întâmpinând dificultăți în înțelegerea variabilelor și comenzilor de bază din cauza înțelegerii mele despre mediul Linux

drapel cn

Îmi este greu să înțeleg câteva concepte de bază despre Linux. Și influența unor variabile asupra acelor concepte.

Aceste concepte de bază sunt Virtual Environment, shell, tty.

Variabila: $PS1 $LANG

Comenzile:

export (export variabilă dintr-un shell în altul? Funcționează și pentru mediile tty și virtuale? Dacă deschid o filă nouă în Ubuntu (tty? terminal?) nu se exportă în celălalt?

env -i ?

Cred că toate aceste probleme sunt legate de înțelegerea mea de bază despre shell-uri, medii virtuale și tty-uri.

Ceea ce nu este bine momentan.

Deci sper că cineva va fi la fel de amabil să-mi explice asta?

Artur Meinild avatar
drapel vn
Bine ati venit! Pentru a face o postare bună de întrebări și răspunsuri, ar trebui să vă concentrați întrebarea pe un singur subiect. De asemenea, puteți parcurge un drum foarte lung căutând pe internet unele dintre întrebările dvs. - răspunsurile sunt acolo.
Satoshi Nakamoto avatar
drapel lc
`tty` nu este un shell, ci o formă de comunicare la fel ca telnet.
Satoshi Nakamoto avatar
drapel lc
https://unix.stackexchange.com/questions/4126/what-is-the-exact-difference-between-a-terminal-a-shell-a-tty-and-a-con
Satoshi Nakamoto avatar
drapel lc
Trebuie să semnalez această întrebare (după ce am votat pozitiv), deoarece majoritatea întrebărilor tale (ai făcut 6) sunt deja duplicate.Ar trebui să cercetați mai întâi în Stack toate acele întrebări, pentru a găsi răspunsul, înainte de a pune o nouă întrebare. Întrebarea dvs. ar trebui să fie nouă (sau dacă problema dvs. nu a putut fi rezolvată și este specifică, ar trebui să fie o altă întrebare)
Puncte:1
drapel cn

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.

Satoshi Nakamoto avatar
drapel lc
Răspunsul tău nu răspunde „Nu înțeleg shell-urile în tty’s...” dar răspunde „Nu înțeleg.. ($PS1, export, env, $LANG)”, apoi am votat în favoarea, dar această întrebare trebuie să fie fii concentrat, există deja un răspuns pentru tty's aici în Stack.
Satoshi Nakamoto avatar
drapel lc
A pus 6 întrebări diferite: 1. Care este scopul PS1 (există o mulțime de detalii tehnice despre acest subiect) 2. pornirea unui al doilea shell virtual în același tty? 3. Pot exporta variabile în alte shell-uri din primul shell 4. Puteți folosi comanda env pentru a seta $LANG... 5. Ce face de fapt env -i? 6.înțelegerea de bază a shell-urilor și tty-urilor

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.