Come impostare e disabilitare le variabili di ambiente locali, utente e di sistema in Linux. Leggere e impostare le variabili di ambiente e shell su un server linux linux stampa tutte le variabili di ambiente

Le variabili di ambiente in Linux sono variabili speciali definite dalla shell e utilizzate dai programmi durante l'esecuzione. Possono essere definiti dal sistema e dall'utente. Le variabili di ambiente del sistema Linux sono definite dal sistema e utilizzate dai programmi a livello di sistema.

Ad esempio, il comando PWD utilizza una variabile di sistema per mantenere la vecchia directory di lavoro. Le variabili di ambiente utente sono impostate dall'utente, per la shell corrente, temporaneamente o permanentemente. L'intero concetto di aggiunta e rimozione delle variabili della shell ruota attorno a più file, comandi e varie shell.

Più in generale, una variabile di ambiente può essere di tre tipi:

1. Variabili d'ambiente locali

Queste variabili sono definite solo per la sessione corrente. Verranno cancellati definitivamente al termine della sessione, sia che si tratti di accesso remoto o di un emulatore di terminale. Non vengono memorizzati in nessun file, ma vengono creati ed eliminati tramite comandi speciali.

2. Variabili shell utente

Queste variabili della shell Linux sono definite per un utente specifico e vengono caricate ogni volta che l'utente accede utilizzando un terminale locale o si connette in remoto. Tali variabili sono generalmente memorizzate nei file di configurazione: .bashrc, .bash_profile, .bash_login, .profile o altri file che si trovano nella directory dell'utente.

3. Variabili di ambiente di sistema

Queste variabili sono disponibili in tutto il sistema, per tutti gli utenti. Vengono caricati all'avvio del sistema da file di sistema configurazioni: /etc/environment, /etc/profile, /etc/profile.d/ /etc/bash.bashrc.

File di configurazione delle variabili di ambiente Linux

Qui daremo una rapida occhiata ai vari file di configurazione sopra elencati, che vengono utilizzati per impostare le variabili di ambiente per l'intero sistema o per un utente specifico.

.bashrc

Questo è un file di variabili specifico dell'utente. Viene caricato ogni volta che l'utente crea una sessione di terminale, ovvero apre un nuovo terminale. Tutte le variabili di ambiente create in questo file hanno effetto ogni volta che viene avviata una nuova sessione del terminale.

.bash_profilo

Queste variabili hanno effetto ogni volta che un utente si connette in remoto tramite SSH. Se questo file è mancante, il sistema cercherà .bash_login o .profile.

/ecc/ambiente

Questo file serve per creare, modificare ed eliminare qualsiasi variabile di ambiente a livello di sistema. Le variabili d'ambiente create in questo file sono disponibili per l'intero sistema, per ciascun utente e anche se connesso in remoto.

/etc/bash.bashrc

Bashrc di sistema. Questo file viene eseguito per ogni utente, ogni volta che crea una nuova sessione di terminale. Funziona solo per utenti locali, quando connessi tramite Internet, tali variabili non saranno visibili.

/etc/profilo

Il profilo del file di sistema. Tutte le variabili in questo file sono disponibili per qualsiasi utente del sistema solo se ha effettuato l'accesso in remoto. Ma non saranno disponibili durante la creazione di una sessione di terminale locale, ad esempio se apri semplicemente un terminale.

Tutte le variabili di ambiente Linux create con questi file possono essere rimosse semplicemente cancellandole da lì. Solo dopo ogni modifica, è necessario disconnettersi e accedere oppure eseguire questo comando:

nome del file di origine

Aggiunta di variabili d'ambiente utente e di sistema in Linux

Ora che conosci un po' di teoria, passiamo alla pratica. Le variabili di ambiente locali in Linux possono essere create con i seguenti comandi:

var=valore
$ esportazione var=valore

Queste variabili saranno disponibili solo per la sessione del terminale corrente.

È possibile utilizzare diversi comandi per rimuovere le variabili di ambiente:

1. Utilizzando l'env

Per impostazione predefinita, env può essere utilizzato per visualizzare tutte le variabili di ambiente impostate. Ma con l'opzione -i, ti consente di rimuovere temporaneamente tutte le variabili della shell ed eseguire il comando senza variabili.

env -i comando

Var è qualsiasi variabile che vuoi passare a questo comando.

Questo comando avvierà una shell senza variabili di ambiente:

Dopo aver avviato un tale ambiente, non saranno disponibili variabili, ma dopo essere usciti tutto tornerà al proprio posto.

2. Utilizzo di disinserimento

Questo è un altro modo per rimuovere le variabili di ambiente Linux. Unset rimuove una variabile per nome fino alla fine della sessione corrente:

annulla l'impostazione nome_variabile

3. Imposta il valore della variabile su ""

Questo è il modo più semplice per eliminare le variabili di ambiente in Linux, impostando una variabile per svuotarla, la elimini per il resto della sessione corrente.

Nota: utilizzando questi metodi, puoi modificare i valori delle variabili di sistema o utente, ma saranno rilevanti solo per la sessione corrente.

Creazione di variabili d'ambiente utente e di sistema

In questa sezione, vedremo come impostare e rimuovere le variabili di sistema e utente non solo per la sessione corrente, ma in modo che l'effetto persista dopo un riavvio.

1. Imposta e rimuovi variabili locali in Linux

Creiamo una variabile locale VAR e la impostiamo su qualsiasi valore, quindi rimuoviamola con unset e assicurati che sia rimossa:

VAR1="Perdita"
$ eco $VAR1
$ non imposta VAR1
$ eco $VAR1

Un altro modo per creare una variabile è con il comando export. Rimuovilo assegnando un valore vuoto:

export VAR="Perdita"
$ eco $VAR
$var=
$ eco $VAR

Ora creiamo una variabile VAR2 e diamogli un valore. Quindi rimuovere temporaneamente tutte le variabili locali eseguendo env -i. Inizierà la shell senza alcuna variabile. Dopo aver digitato exit, tutte le variabili verranno ripristinate.

VAR2="Perdita"
$ eco $VAR2
$ ambiente -io bash
$ eco $VAR2

Impostazione e rimozione di variabili utente

Modifica il file .bashrc nella tua home directory aggiungendo un comando di esportazione per esportare la variabile desiderata. Quindi esegui il comando source per applicare le modifiche. Creiamo, ad esempio, una variabile CD:

Aggiungi questa riga (o, quindi incolla, quindi Esc e :wq):

export CD="Questa è la casa perduta"

Ora resta da aggiornare la configurazione:

sorgente .bashrc
$ eco $ CD

Per rimuovere questa variabile, rimuovila semplicemente da .bashrc.

Ora aggiungiamo una variabile di ambiente con .bash_profile. Questa variabile, come già saprai, sarà disponibile solo quando accedi da remoto:

vi .bash_profile

Aggiungi una riga:

export VAR2="Questa è casa perduta"

Ed esegui questi comandi per applicare le modifiche e testare l'aggiunta di variabili:

sorgente .bash_profile
$ eco $VAR2

La variabile non è disponibile perché hai creato una sessione di terminale locale, ora connettiti tramite ssh:

ssh [email protetta]
$ eco $VAR2

È possibile eliminare questa variabile di ambiente allo stesso modo del caso precedente eliminandola dal file.

Commento: Queste variabili sono sempre disponibili, ma non per tutti gli utenti.

Impostazione e rimozione delle variabili di ambiente di sistema

Creiamo una variabile disponibile per tutti gli utenti in tutte le sessioni del terminale tranne quelle remote aggiungendola a /etc/bash.profile:

vi /etc/bash.profile

export VAR="Questa è una variabile a livello di sistema"

Quindi aggiorniamo:

sorgente /etc/bash.bashrc

Ora questa variabile è disponibile per tutti gli utenti, in tutti i terminali:

eco $VAR
$ sudo su
$ eco $VAR
$su-
$ eco $VAR

Se si desidera rendere disponibile la variabile di ambiente a tutti gli utenti che si connettono a questa macchina in remoto, modificare il file /etc/profile:

export VAR1="Questa è una variabile a livello di sistema solo per sessioni remote"

Aggiorna la configurazione e verifica la disponibilità della variabile, sarà disponibile solo da remoto:

sorgente /etc/profilo
$ eco $VAR1

Se devi aggiungere una variabile di ambiente su Linux in modo che sia disponibile sia per le sessioni remote che locali, esportala in /etc/environment:

vi /etc/ambiente

export VAR12="Sono disponibile ovunque"

Controlliamo:

sorgente /etc/ambiente
$ eco $VAR12
$ sudo su
$ eco $VAR12
$ uscita
$ ssh host locale
$ eco $VAR12

Variabili ambientali ( variabile d'ambiente) vengono utilizzati per memorizzare valori comuni di variabili tra script e programmi. Tali variabili possono essere impostate per un periodo di tempo, ad esempio per il periodo di funzionamento di una particolare shell di terminale, o per il periodo di una sessione utente, oppure è possibile impostare una variabile d'ambiente a livello globale - per l'intero sistema .

Variabili ambientali

$CASA
La variabile contiene il percorso della directory home dell'utente corrente. $UTENTE
Nome utente corrente $PERCORSO
Elenco di directory da cercare con la shell programmi eseguibili. $PWD
Il percorso della directory di lavoro corrente (o pwd). Esempio: dir_path=$(pwd) . $ GUSCIO
Interprete predefinito $RANDOM
Genera un numero casuale 0..32767 ogni volta che si accede alla variabile. $SECONDI
Tempo in sec. dall'inizio della shell. $? Il risultato del comando precedente. $NOME host
Nome del computer $HISTFILE
Percorso del file di cronologia dell'interprete $IFS
Elenco di caratteri separatori per comandi, parametri, elementi dell'array (predefinito: spazio, tabulazione, nuova riga) $PS1
Modello di stringa del prompt dell'interprete.

Impostazione temporanea di una variabile di ambiente

Impostazione di una variabile di ambiente per il periodo della sessione:

# Per un nuovo processo env varname=value [comando] # Per la shell corrente e tutti i suoi sottoprocessi export varname=value [comando]

Il valore della variabile viene mantenuto fino al riavvio del sistema.

Impostazione di un valore costante

Le variabili di ambiente a livello di sistema vengono impostate tramite il file /etc/environment:

AMBIENTE="dev"

Impostazione di una variabile di ambiente specifica per l'utente tramite ~/.bashrc o ~/.bash_profile:

PERCORSO="$(PERCORSO):/home/utente/bin:"

Attenzione!

Il file ~/.bash_profile verrà eseguito quando l'interprete viene avviato con l'opzione -l. Una volta effettuato l'accesso localmente, questo file non è leggibile!

È inoltre necessario ricordare che le modifiche avranno effetto solo dopo il riavvio della sessione!

Visualizzazione del valore di una variabile di ambiente

Per visualizzare il valore di una variabile di ambiente, utilizzare il comando printenv:

Printenv<имя_переменной>

#shell, #bash, #ambiente

Gli oggetti denominati e contenenti dati utilizzati da almeno un'applicazione, generalmente multipla, sono chiamati variabili di ambiente. In poche parole, una variabile di ambiente non è altro che una variabile che ha un nome e un valore.

I valori delle variabili di ambiente possono essere l'editor predefinito da utilizzare, come la posizione di tutti i file che possono essere eseguiti sul sistema o le impostazioni locali per il sistema. È un po' complicato per i principianti, ma una variabile di ambiente è un ottimo modo per condividere le impostazioni di configurazione tra più applicazioni e processi.

Il pacchetto Coreutils contiene i programmi env e printenv. Per elencare tutte le variabili di ambiente che attualmente hanno un valore, digita semplicemente:

$printenv

Esistono due tipi di variabili di ambiente nella shell bash:

  • Variabili globali
  • Variabili locali

Variabili d'ambiente globali

Dalla sessione della shell, vengono visualizzate le variabili di ambiente globali e tutti i processi figlio generati dalla shell.

D'altra parte, le variabili locali sono accessibili solo dalla shell quando vengono create. Ciò rende le variabili di ambiente globali utili nelle applicazioni che richiedono informazioni dal processo padre e generano processi figlio.

Per impostazione predefinita, un sistema Linux imposta determinate variabili di ambiente globali all'avvio di una sessione bash. Le variabili di ambiente di sistema utilizzano tutte le maiuscole ogni volta per distinguerle dalle normali variabili di ambiente utente.

Variabili d'ambiente locali

Perché il loro nome indica che le variabili di ambiente locale possono essere visualizzate solo nel processo locale in cui sono definite. Non confonderti con le variabili di ambiente locali, sono ugualmente importanti come le variabili di ambiente globali. In effetti, il sistema Linux definirà per impostazione predefinita anche le variabili di ambiente locale standard per te. Diventa complicato quando provi a vedere l'elenco delle variabili di ambiente locali. Sfortunatamente, non esiste alcun comando per noi che visualizzerà solo le variabili di ambiente locali. C'è un comando che mostra tutte le variabili d'ambiente impostate per un particolare processo. Si noti che questo include anche variabili di ambiente globali.

Impostazione delle variabili d'ambiente

Puoi creare le tue variabili di ambiente direttamente dalla shell bash. Nella prossima sezione, ti mostreremo come creare le tue variabili di ambiente e fare riferimento ad esse dalla tua shell interattiva o dal tuo programma shell.

Impostazione delle variabili d'ambiente locali

Una volta che una shell bash è stata avviata (o è apparso uno script di shell), puoi creare variabili locali visibili all'interno del tuo processo di shell. È possibile assegnare una variabile di ambiente a una stringa o a una variabile numerica utilizzando il segno di uguale, a cui viene assegnato il valore della variabile:

$ andreyex_test=test $ echo $andreyex_test test $

Congratulazioni, hai appena creato la tua prima variabile. Ricorda solo che ogni volta che devi fare riferimento al valore della variabile di ambiente andreyex_test, fai riferimento ad essa con il nome $andreyex_test.

Se devi assegnare una stringa di valori contenente spazi, dovrai utilizzare una virgoletta singola per indicare l'inizio e la fine della stringa:

$ andreyex_test=testare una stringa lunga -bash: a: comando non trovato $ andreyex_test="testare una stringa lunga" $ echo $andreyex_test testare una stringa lunga

Se lasciata senza virgolette singole, la shell bash presume che il carattere successivo sia un altro comando da elaborare.

Si noti che per la variabile di ambiente locale che abbiamo definito abbiamo utilizzato lettere minuscole, le variabili di ambiente di sistema che abbiamo visto finora hanno utilizzato tutte lettere maiuscole.

Nella shell bash, questa è la convenzione standard. Se stai configurando nuove variabili di ambiente, non è necessario, ma è consigliabile utilizzare le lettere minuscole. Ciò aiuta a differenziare le variabili di ambiente personali dai risultati delle variabili di ambiente di sistema.

NOTA. È molto importante che non vi siano spazi tra il nome della variabile di ambiente, il segno di uguale e il valore. Se inserisci degli spazi in un compito, la shell bash interpreta il valore come un comando separato:

$ andreyex_test2 = test -bash: andreyex_test2: comando non trovato $

La variabile di ambiente locale impostata nel processo della shell sarà disponibile per l'uso ovunque nel processo della shell. Ma se crei un'altra shell, non è disponibile nella shell figlio:

$ bash $ echo $andreyex_test $ exit exit $ echo $andreyex_test testare una stringa lunga $

In questo caso, abbiamo avviato una shell figlio. Come puoi vedere, la variabile d'ambiente andreyex_test non è disponibile nella shell figlio (contiene un valore vuoto). Dopo aver lasciato la shell figlia e essere tornati alla shell originale, la variabile di ambiente locale era ancora disponibile.

Allo stesso modo, se imposti una variabile di ambiente locale in un processo figlio dopo aver lasciato il processo figlio, la variabile di ambiente locale non è più disponibile:

$ bash $ andreyex_test=test $ echo $ andreyex_test testing $ exit exit $ echo $ andreyex_test $

La variabile d'ambiente andreyex_test impostata nella shell figlia non esiste quando torniamo alla shell madre.

Impostazione delle variabili d'ambiente globali

Le variabili di ambiente globali sono visibili da tutti i processi figlio creati dal processo che imposta la variabile di ambiente globale. Il metodo utilizzato per creare una variabile di ambiente globale consiste nel creare una variabile di ambiente locale e quindi esportarla nell'ambiente globale.

Questo viene fatto con il comando di esportazione:

$ echo $andreyex_test testare una stringa lunga $ export andreyex_test $ bash $ echo $andreyex_test testare una stringa lunga $

Dopo aver utilizzato il comando export nella variabile di ambiente locale andreyex_test, abbiamo avviato un nuovo processo di shell e abbiamo esaminato il valore della variabile di ambiente andreyex_test. Questa volta, il comando export ha reso globale la variabile di ambiente globale, quindi ha mantenuto il suo valore.

Si noti che quando si esegue il comando export su una variabile di ambiente locale, non si utilizza il simbolo del dollaro per fare riferimento al nome della variabile.

Rimozione delle variabili di ambiente

Ovviamente, se è possibile creare una nuova variabile di ambiente, avrebbe senso eliminare anche una variabile di ambiente esistente. Questo può essere fatto usando il comando unset:

$ echo $ test_andreyex $ unset test_andreyex $ echo $ test_andreyex $

Se ti riferisci a una variabile di ambiente nel comando unset, fai attenzione a non usare il simbolo del dollaro.

Le cose si complicano un po' quando si tratta di variabili ambientali globali. Se sei in un processo figlio e disabiliti la variabile di ambiente globale, si applica solo al processo figlio. La variabile di ambiente globale rimane disponibile nel processo padre:

$ andreyex_test=test $ esporta andreyex_test $ bash $ echo $ andreyex_test testing $ unset andreyex_test $ echo $andreyex_test $ esci esci $ echo $andreyex_test testing $

In questo esempio, stiamo impostando una variabile di ambiente locale chiamata andreyex_test, quindi la esportiamo per renderla una variabile di ambiente globale. Abbiamo quindi avviato il processo della shell figlio e siamo stati controllati per assicurarci che la variabile di ambiente globale andreyex_test fosse ancora disponibile. Quindi, mentre eravamo ancora nella shell figlia, abbiamo usato il comando unset per rimuovere la variabile di ambiente globale andreyex_test, quindi siamo usciti dalla shell figlia. Ora tornando alla shell madre originale, abbiamo verificato il valore della variabile d'ambiente andreyex_test ed è ancora valido.

Variabili d'ambiente predefinite della shell

Esistono variabili di ambiente specifiche che la shell bash utilizza per determinare l'ambiente di sistema. Puoi sempre contare queste variabili da utilizzare sul tuo sistema Linux. Poiché la shell bash è un derivato della shell Bourne Unix originale, include anche le variabili di ambiente originariamente definite in quella shell.

Gli esempi seguenti mostrano che le variabili di ambiente fornite dalla shell bash sono compatibili con la shell Bourne Unix originale.

La variabile di ambiente di gran lunga più preziosa in questo elenco è la variabile ambienti PERCORSO.

Quando si digita un comando in una shell dei comandi della shell (interface riga di comando), la shell deve cercare nel sistema per trovare il programma. Le directory in cui cerca i comandi sono determinate dalla variabile di ambiente PATH. Su un sistema Linux, la variabile d'ambiente PATH dovrebbe assomigliare a questa:

$ echo $PATH /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin $

In questo caso, mostra che ci sono otto directory in cui la shell cerca i comandi. Ogni directory è separata da due punti e la variabile PATH non termina con la fine dell'elenco delle directory. Puoi sempre aggiungere directory aggiuntive a PATH aggiungendo una nuova directory e aggiungendo altri due punti. PATH mostra anche la query in cui cerca gli ordini.

Oltre alle variabili di ambiente Bourne standard, la shell bash fornisce anche diverse variabili, come mostrato:

Variabili di Bash Shell Bourne:

CDPATH: un elenco di directory separate da due punti utilizzate come percorso di ricerca per il comando cd.
HOME: la directory home dell'utente corrente.
IFS: un elenco di caratteri che separa i campi utilizzati dalla shell per separare le righe di testo.
MAIL: nome file per la casella di posta dell'utente corrente. La shell bash controlla questo file per la nuova posta.
MAILPATH: un elenco di più nomi di file per la cassetta postale dell'utente corrente. La shell bash controlla ogni file in questo elenco per la nuova posta.
OPTARG: il valore dell'ultimo argomento di opzione elaborato dal comando getopts.
OPTIND: il valore dell'indice dell'ultimo argomento dell'opzione elaborato dal comando getopts.
PERCORSO: un elenco di directory separate da due punti in cui la shell cerca i comandi.
PS1: prompt della riga di comando principale della riga di comando.
PS2: stringa di richiesta CLI della shell secondaria.

Variabili di ambiente shell bash:

BASH: percorso completo per l'esecuzione dell'istanza corrente della shell bash.
BASH_ENV: una volta installato, ogni script bash tenta di eseguire il file di avvio definito da questa variabile prima di essere eseguito.
BASH_VERSION: il numero di versione dell'istanza corrente della shell bash.
BASH_VERSINFO: un array di variabili contenente le singole versioni principali e secondarie dell'attuale istanza della shell bash.
COLONNE: contiene la larghezza del terminale utilizzato per l'istanza della shell bash corrente.
COMP_CWORD: un indice nella variabile COMP_WORDS che contiene la posizione corrente del cursore.
COMP_LINE: riga di comando corrente.
COMP_POINT: l'indice della posizione corrente del cursore rispetto all'inizio del comando corrente.
COMP_WORDS: un array di variabili contenente le singole parole sulla riga di comando corrente.
COMPREPLY: un array di variabili contenente i possibili codici di completamento generati dalla funzione di shell.
DIRSTACK: un array di variabili contenente il contenuto corrente dello stack di directory.
EUID: l'ID utente effettivo dell'utente corrente.
FCEDIT: l'editor predefinito utilizzato dal comando fc.
FIGNORE: un elenco di suffissi separati da due punti da ignorare quando si esegue il completamento del nome file.
FUNCNAME: il nome della funzione di shell attualmente in esecuzione.
GLOBIGNORE: un elenco di modelli separati da due punti che specifica un insieme di nomi di file da ignorare durante l'espansione del nome file.
GRUPPI: una matrice di variabili contenente un elenco di gruppi di cui l'utente corrente è un membro.
histchars: fino a tre personaggi che controllano l'espansione della storia.
HITCMD: il numero di cronologia del comando corrente.
HISTCONTROL: controlla quali comandi vengono inseriti nell'elenco della cronologia della shell.
HISTFILE: nome del file per salvare l'elenco della cronologia della shell (il valore predefinito è history.bash).
HISTFILESIZE: il numero massimo di righe da memorizzare nel file della cronologia.
HISTIGNORE: un elenco di modelli separati da due punti utilizzati per determinare quali comandi vengono ignorati per il file di cronologia.
HISTSIZE: il numero massimo di comandi archiviati nel file di cronologia.
HOSTFILE: Contiene il nome del file da leggere quando la shell deve inserire il nome host.
HOSTNAME: il nome dell'host corrente.
HOSTTYPE: una stringa che descrive l'host bash-shell è in esecuzione.
IGNOREEOF: Il numero di caratteri EOF consecutivi che la shell deve ricevere prima di uscire. Se questo valore non esiste, il valore predefinito è uno.
INPUTRC: il nome del file di inizializzazione Readline (il valore predefinito è .inputrc).
LANG: La categoria locale per la shell.
LC_ALL: sovrascrive la variabile LANG specificando la categoria della locale.
LC_COLLATE: imposta l'ordinamento utilizzato durante l'ordinamento dei valori delle stringhe.
LC_CTYPE: specifica l'interpretazione dei caratteri utilizzati nell'espansione del nome file e nella corrispondenza del modello.
LC_MESSAGES: specifica l'impostazione locale da utilizzare durante l'interpretazione di stringhe tra virgolette precedute dal simbolo del dollaro.
LC_NUMERIC: specifica l'impostazione locale utilizzata per formattare i numeri.
LINENO: numero di riga nello script in esecuzione.
LINEE: Specifica il numero di linee disponibili sul terminale.
MACHTYPE: una stringa che specifica il tipo di sistema nel formato cpu-company-system.
MAILCHECK: la frequenza con cui la shell dovrebbe controllare (impostazione predefinita 60 secondi) per la nuova posta.
OLDPWD: la directory di lavoro precedente utilizzata dalla shell.
OPTERR: se impostato su 1, la shell bash visualizza gli errori generati dal comando getopts.
OSTYPE: una stringa che specifica sistema operativo L'oggetto in cui è in esecuzione la shell.
PIPESTATUS: un array di variabili contenente un elenco di valori dello stato di uscita dai processi di processo in primo piano.
POSIXLY_CORRECT: se impostato, bash viene eseguito in modalità POSIX.
PPID: L'ID del processo (PID) del processo padre della shell bash.
PROMPT_COMMAND: se impostato, viene visualizzato il comando da eseguire prima del prompt primario.
PS3: Richiedi di utilizzare il comando di selezione.
PS4: il prompt visualizzato prima della riga di comando viene ripetuto se viene utilizzata l'opzione bash -x.
PWD: directory di lavoro corrente.
RANDOM: restituisce un numero casuale compreso tra 0 e 32767. Assegnando un valore a questa variabile verrà generato un generatore di numeri casuali.
RISPOSTA: La variabile predefinita per il comando di lettura.
SECONDS: il numero di secondi dall'avvio della shell. L'assegnazione di un valore reimposta il timer su un valore.
SHELLOPTS: un elenco separato da due punti delle opzioni consentite della shell bash.
SHLVL: specifica il livello della shell, incrementato di uno ogni volta che viene avviata una nuova shell bash.
TIMEFORMAT: un formato che specifica come la shell visualizza i valori temporali.
TMOUT: un valore per quanto tempo (in secondi) i comandi di selezione e lettura devono attendere per l'immissione. Il valore predefinito zero significa attendere indefinitamente.
UID: l'ID utente reale dell'utente corrente.

Potresti notare che dopo aver utilizzato il comando set, non vengono visualizzate tutte le variabili di ambiente predefinite. La spiegazione di ciò potrebbe essere che, sebbene si tratti di variabili di ambiente predefinite, non tutte devono contenere un valore.

Conclusione

In questa guida abbiamo esplorato il mondo delle variabili di ambiente Linux. Le variabili di ambiente globali sono spesso accessibili da qualsiasi processo figlio generato dal processo in cui sono definite. Le variabili di ambiente locali saranno accessibili solo dal processo in cui sono definite.

Il sistema Linux utilizza ogni variabile di ambiente globale e locale per memorizzare informazioni sull'ambiente di sistema. Sarai in grado di accedere a queste informazioni dall'interfaccia della riga di comando della shell, nonché per gli script interni della shell. La shell bash utilizza le variabili di ambiente di sistema definite nella shell originale di UNO Bourne, oltre a molte nuove variabili di ambiente. La variabile d'ambiente PATH definisce il modello di ricerca che la shell bash accetta per trovare un comando eseguibile. Sarai in grado di cambiare la variabile d'ambiente PATH per aggiungere le tue directory, o forse il simbolo della directory corrente per rendere più facile lavorare con i tuoi programmi. Puoi anche creare le tue variabili di ambiente globali e locali per uso personale. Una volta creata, una variabile di ambiente è disponibile per l'intera sessione della shell.

Ci sono molti file di avvio che avviano la shell bash dopo che è stata avviata. Questi file di avvio possono contenere definizioni di variabili di ambiente per impostare variabili di ambiente standard per ciascuna sessione bash. Dopo essere entrati Sistema Linux La shell bash accede al file di avvio /etc/profile nonché a tre file di avvio locali per utente, $HOME/.bash, $HOME/.bash login e $HOME/.profile.

Gli utenti personalizzeranno questi file per includere variabili di ambiente e script di avvio per uso personale. La shell bash fornisce inoltre array di variabili di ambiente. Queste variabili di ambiente possono contenere più valori in una singola variabile. Potrai accedere ai valori individualmente specificando il valore dell'indice, o in generale specificando il nome completo dell'array della variabile di ambiente. Infine, in questa guida, dovremmo menzionare l'uso degli alias di comando. Sebbene non siano variabili di ambiente, gli alias dei comandi si comportano quasi come variabili di ambiente. Consentono di definire un alias per un comando, insieme alle sue opzioni. Invece di digitare un comando e opzioni molto lunghi, puoi semplicemente dargli un semplice alias e usarlo in qualsiasi momento nella sessione della shell.

Mentre lavora con il server, la shell compila molte informazioni che ne determinano il comportamento e l'accesso alle risorse. Alcune di queste opzioni si trovano nelle impostazioni della shell, altre sono determinate dall'input dell'utente.

Un modo in cui la shell tiene traccia di queste informazioni è utilizzare l'ambiente. L'ambiente è un'area contenente variabili che definiscono il sistema che la shell costruisce ogni volta che viene avviata una sessione.

Questa guida spiega come interagire con l'ambiente e leggere o impostare variabili di ambiente e shell in modo interattivo e tramite file di configurazione. Tutti i passaggi vengono eseguiti su un VPS Ubuntu 12.04, ma qualsiasi moderno Distribuzione Linux dovrebbe funzionare allo stesso modo.

Come funzionano l'ambiente e le sue variabili

Ogni volta che viene attivata una sessione della shell, viene avviato un processo per raccogliere e compilare le informazioni che dovrebbero essere disponibili per la shell e i suoi processi figlio. La shell ottiene questi dati da un set vari file e le impostazioni nel sistema.

In generale, l'ambiente fornisce uno strumento di passaggio che raccoglie e imposta le impostazioni necessarie per il processo della shell, che a sua volta le trasmette ai processi figlio.

L'ambiente è sotto forma di una stringa contenente coppie chiave-valore. Più valori sono generalmente separati da un carattere due punti (:). Ogni coppia, in generale, assomiglia a questo:

CHIAVE=valore1:valore2:...

Se il valore contiene spazi, è necessario utilizzare virgolette doppie:

KEY="valore con spazi"

In questo caso, la chiave indica variabili di uno dei due tipi esistenti: variabili di ambiente o variabili di shell.

variabili ambientali sono variabili che sono state definite per la shell corrente e sono ereditate da tutte le shell o processi figlio. Le variabili di ambiente vengono utilizzate per passare informazioni ai processi avviati da una shell.

Variabili di shell sono variabili che sono contenute esclusivamente nella shell in cui sono state impostate o definite. Sono spesso usati per tenere traccia dei dati correnti (come la directory di lavoro corrente).

Tipicamente, tali variabili sono indicate con lettere maiuscole. Questo aiuta gli utenti a distinguere tra variabili di ambiente in altri contesti.

Output di shell e variabili d'ambiente

Ogni sessione tiene traccia della propria shell e delle variabili di ambiente. Ci sono diversi modi per farli uscire.

Per visualizzare un elenco di tutte le variabili di ambiente, utilizzare i comandi env o printenv. Per impostazione predefinita, produrranno esattamente lo stesso risultato:

printenv
SHELL=/bin/bash
TERM=xtermine
UTENTE=demuser
LS_COLORS=rs=0:di=01;34:ln=01;36:mh=00:pi=40;33:so=01;35:do=01;35:bd=40;33;01:cd= 40;33;01:o=40;31;01:su=37;41:sg=30;43:ca:...
MAIL=/var/mail/demouser
PATH=/usr/local/bin:/usr/bin:/bin:/usr/local/games:/usr/games
PWD=/home/demouser
LANG=it_IT.UTF-8
SHLVL=1
HOME=/home/demouser
LOGNAME=demuser
LESSOPEN=| /usr/bin/lesspipe %s
LESSCLOSE=/usr/bin/lesspipe %s %s
_=/usr/bin/printenv

Questo è un tipico esempio dell'output dei comandi printenv ed env. Questi comandi differiscono solo per alcune singole funzioni. Ad esempio printenv può richiedere i valori delle singole variabili:

printenv SHELL
/bin/bash

Il comando env consente di modificare l'ambiente in cui vengono eseguiti i programmi passando un insieme di definizioni di variabili al comando, qualcosa del genere:

env VAR1="blahblah" command_to_run command_options

Come accennato in precedenza, i processi figlio di solito ereditano le variabili di ambiente del processo padre, il che rende possibile modificare i valori o introdurre variabili aggiuntive per i processi figlio.

Come puoi vedere nell'output del comando printenv, molte variabili di ambiente vengono create da file e processi di sistema senza l'intervento dell'utente.

Ma come si visualizzano le variabili della shell?

Il comando set viene utilizzato per questo. Se inserito senza opzioni aggiuntive, set elenca tutte le variabili della shell, le variabili di ambiente, le variabili locali e le funzioni della shell:

impostato
BASH=/bin/bash
BASHOPTS=checkwinsize:cmdhist:expand_aliases:extglob:extquote:force_fignore:histappend:interactive_comments:login_shell:progcomp:promptvars:sourcepath
BASH_ALIASES=()
BASH_ARGC=()
BASH_ARGV=()
BASH_CMDS=()
. . .

Di norma, questo elenco è piuttosto lungo. Per visualizzarlo in un formato più conveniente, aprilo con un programma cercapersone:

Questo elenco contiene un'enorme quantità di informazioni aggiuntive che non sono attualmente necessarie (ad esempio, alcune funzioni bash).

Per "ripulire" l'output, è necessario eseguire il comando set in modalità POSIX, che salta le funzioni della shell. Questo deve essere fatto in una subshell in modo da non modificare l'ambiente corrente:

(set -o posix; set)

Questa azione elencherà tutte le variabili di ambiente e shell.

Puoi anche confrontare questo risultato con il risultato dei comandi env/printenv e provare a elencare solo le variabili della shell, ma un tale elenco non sarà l'ideale, poiché questi comandi stampano le informazioni in modo diverso:

com-23<(set -o posix; set | sort) <(env | sort)

Molto probabilmente, l'elenco conterrà diverse variabili di ambiente, perché il comando set stampa i valori tra virgolette, ma i comandi printenv ed env no.

Tuttavia, è un ottimo modo per visualizzare l'ambiente e le variabili della shell impostate in una determinata sessione.

Tali variabili vengono utilizzate per tutti i tipi di scopi. Forniscono un modo alternativo per impostare valori di sessione persistenti tra i processi senza dover apportare modifiche al file.

Ambiente di base e variabili di shell

Alcune variabili di ambiente e shell particolarmente utili sono molto comunemente usate.

Di seguito è riportato un elenco delle principali variabili di ambiente:

  • CONCHIGLIA: descrive la shell che interpreta i comandi immessi. Nella maggior parte dei casi, bash è impostato per impostazione predefinita, ma questo valore può essere modificato se necessario.
  • TERMINE: specifica il tipo di terminale emulato all'avvio della shell. È possibile emulare diversi terminali hardware a seconda dei requisiti operativi. In generale, non devi preoccuparti di questo.
  • UTENTE: utente corrente.
  • PWD: directory di lavoro corrente.
  • OLDPWD: directory di lavoro precedente. La shell lo conserva nel caso in cui esegui il comando cd -.
  • LS_COLORI: specifica i codici colore utilizzati per codificare a colori l'output del comando ls. Tale output aiuta l'utente a leggere il risultato del comando più velocemente (ad esempio, per distinguere rapidamente tra i tipi di file).
  • POSTA: Percorso della casella di posta corrente dell'utente.
  • SENTIERO: Elenco delle directory a cui accede il sistema durante l'esecuzione dei comandi. Quando l'utente esegue il comando, il sistema controlla queste directory nell'ordine specificato per l'eseguibile.
  • LANG: Impostazioni correnti della lingua e della localizzazione, inclusa la codifica dei caratteri.
  • CASA: directory home dell'utente corrente.
  • _ : ultimo comando eseguito.

Dopo aver esaminato l'elenco delle variabili di ambiente, esaminare l'elenco delle variabili della shell:

  • BASHOPTS: elenco di opzioni utilizzate durante l'esecuzione di bash. Questo può essere utilizzato per verificare se l'ambiente funziona correttamente.
  • BASH_VERSIONE: la versione in esecuzione di bash in formato leggibile dall'uomo.
  • BASH_VERSINFO: versione bash in formato leggibile dalla macchina.
  • COLONNE: definisce la larghezza dell'output in colonne.
  • DIRSTACK: lo stack di directory disponibili per i comandi pushd e popd.
  • DIMENSIONE HISTFILE: il numero massimo di righe contenute nel file della cronologia dei comandi.
  • HISTSIZE: Numero di comandi da memorizzare nella lista cronologica.
  • NOME HOST: nome host corrente.
  • IFS: Separatore interno per i campi di input sulla riga di comando. L'impostazione predefinita è uno spazio.
  • PS1: definisce la stringa del prompt principale - l'aspetto della riga di comando all'avvio di una sessione di shell. La variabile PS2 imposta la stringa di prompt secondaria se il comando si estende su più righe.
  • SHELLOPTS: opzioni della shell che possono essere impostate con set.
  • UID: L'ID univoco dell'utente corrente.

Impostazione delle variabili di shell e di ambiente

Di seguito sono riportati alcuni esempi per dimostrare la differenza tra shell e variabili di ambiente e spiegare la sintassi per impostare queste variabili.

Creazione di variabili di shell

Per prima cosa devi impostare le variabili della shell della sessione corrente. Questo è molto semplice, tutto ciò che devi fare è fornire un nome e un valore. Come già accennato, le lettere maiuscole vengono utilizzate per scrivere i nomi di tali variabili.

TEST_VAR="Ciao mondo!"

Questo esempio utilizza le virgolette perché il valore contiene spazi. Inoltre, qui devono essere utilizzate le virgolette singole, poiché il punto esclamativo è un carattere speciale nella shell bash che fa riferimento alla cronologia dei comandi a meno che non sia sottoposto a escape o racchiuso tra virgolette singole.

Quindi, la variabile shell risultante è valida nella sessione corrente, ma non viene passata ai suoi processi figlio.

Per verificarlo, utilizzare il comando grep sul risultato del comando set:

impostare | grep TEST_VAR
TEST_VAR="Ciao mondo!"

Puoi anche verificare che la variabile data non sia una variabile di ambiente eseguendo grep sul risultato del comando printenv:

printenv | grep TEST_VAR

Questa azione non produrrà alcun risultato.

Questo può essere utilizzato per aprire il valore di qualsiasi shell o variabile di ambiente.

eco $TEST_VAR
Ciao mondo!

Come puoi vedere, per fare riferimento al valore di una variabile, devi usare il simbolo $.

Anche in questo caso, la variabile risultante non dovrebbe essere passata a nessun processo figlio. Per testarlo, all'interno della tua shell attuale, espandi una nuova shell bash:

bash
eco $TEST_VAR

Se espandi una shell figlio e provi ad aprire il contenuto di una variabile, non verrà visualizzato nulla. Ciò significa che tutto funziona correttamente.

Per tornare alla shell originale, digita exit:

Creazione di variabili d'ambiente

Ora prova a trasformare la variabile shell in una variabile di ambiente. Questo viene fatto esportando una variabile. Il comando che esegue l'esportazione ha un nome corrispondente.

Questo comando trasforma una variabile di shell in una variabile di ambiente. Per verificare se tutto è stato eseguito correttamente, puoi rivedere nuovamente l'elenco delle variabili di ambiente:

printenv | grep TEST_VAR
TEST_VAR=Ciao mondo!

Ora questa variabile viene visualizzata in questo elenco. Puoi anche espandere nuovamente la shell figlio:

bash
eco $TEST_VAR
Ciao mondo!

Bene! La shell figlia ha ottenuto la variabile della shell padre. Prova a esportare un'altra variabile prima di lasciare la shell figlio.

export NEW_VAR="Test di esportazione"

Verifica se la variabile è stata esportata:

printenv | grep NEW_VAR
NEW_VAR=Test di esportazione

Ora torna alla shell originale:

Controlla se la variabile data può essere aperta:

Il risultato non viene restituito

Questo perché le variabili di ambiente vengono passate solo ai processi figlio. Non esiste un modo integrato per impostare le variabili di ambiente della shell padre. Nella maggior parte dei casi, ciò impedisce ai programmi di influire sull'ambiente operativo da cui sono stati avviati.

La variabile NEW_VAR è stata impostata come variabile d'ambiente della shell figlio. Questa variabile è valida per questa shell e le sue shell e processi figlio. Dopo che l'utente è tornato alla shell originale, questo ambiente è stato distrutto.

Spostamento e ripristino di variabili

La variabile TEST_VAR è ancora una variabile di ambiente. Per renderla nuovamente una variabile di shell, digita:

esportazione -n ​​TEST_VAR

Ora questa variabile non è più una variabile di ambiente:

printenv | grep TEST_VAR

Questa è di nuovo una variabile di shell:

impostare | grep TEST_VAR
TEST_VAR="Ciao mondo!"

Per ripristinare completamente una variabile, sia essa di ambiente o di shell, utilizzare il comando unset:

Assicurati che non ci sia più tale variabile:

Il risultato non è stato visualizzato perché la variabile è stata reimpostata.

Impostazione automatica delle variabili d'ambiente

Come già accennato, molti programmi utilizzano variabili di ambiente per determinare come dovrebbero funzionare. Impostare le variabili necessarie ogni volta che viene creata una nuova shell è piuttosto scomodo. Inoltre, molte variabili vengono impostate immediatamente all'ingresso. Come impostare le variabili automaticamente?

Questo è un po' più complicato di quanto sembri a prima vista perché la shell bash legge molti file di configurazione.

Tipi di sessione della shell

La shell bash legge diversi file di configurazione a seconda di come è stata avviata la sessione. I primi due tipi di sessioni che definiscono una shell sono la sessione iniziale e la sessione figlio.

Shell iniziale o iniziale(login shell) è una sessione di shell che si apre dopo l'autorizzazione dell'utente. Se l'utente accede a un terminale o accede tramite SSH, verrà aperta una shell di avvio.

Se una nuova sessione viene avviata da una sessione autorizzata (di avvio) (poiché una nuova shell bash è stata avviata in precedenza negli esempi), questa sessione sarà sussidiaria (non-Accedere conchiglia). Per aprire questa sessione non è necessario eseguire la procedura di autorizzazione.

Inoltre, le sessioni di shell sono interattive e non interattive.

sessione interattiva shells (shell interattiva) è una sessione collegata a un terminale. Una sessione di shell non interattiva è una sessione che non è collegata a un terminale.

Quindi, le sessioni di shell sono classificate in base ai seguenti aspetti: start-child, interattivo-non interattivo.

Una normale sessione aperta con SSH è solitamente una sessione di avvio interattiva. Uno script eseguito tramite la riga di comando di solito viene eseguito in una sessione figlio non interattiva. Una sessione terminale è costituita da varie combinazioni di queste due proprietà.

Classificando una sessione come sessione iniziale o come sessione figlio, il sistema comprende quali file leggere per inizializzare la sessione della shell.

Quindi, per prima cosa, la sessione di avvio ottiene le configurazioni da /etc/profile. Quindi cerca il file di configurazione della shell di avvio nella directory home dell'utente per recuperare le configurazioni definite dall'utente.

Tale sessione legge i file ~/.bash_profile, ~/.bash_login e ~/.profile e non legge altri file.

La sessione figlio a sua volta legge /etc/baash.bashrc e quindi il file ~/.bash.rc dell'utente per distribuire l'ambiente.

Le shell non interattive leggono la variabile di ambiente BASH_ENV e il file specificato per creare un nuovo ambiente.

Come impostare le variabili d'ambiente

Come puoi vedere, le configurazioni sono sparse su diversi file.

Ciò rende il sistema molto flessibile, utile in determinate situazioni in cui è necessario impostare diverse opzioni per le shell di avvio e figlio. Tuttavia, queste shell utilizzano generalmente le stesse impostazioni.

Fortunatamente, la maggior parte delle distribuzioni Linux specifica il file di configurazione della shell figlio come origine delle configurazioni della shell di avvio. Ciò significa che puoi definire variabili di ambiente per entrambe le sessioni nei file di configurazione della shell figlio.

In genere, entrambe le shell utilizzano variabili di ambiente specificate dall'utente. Ciò significa che puoi impostare queste variabili nel file ~/.bashrc.

Apri questo file:

Molto probabilmente, contiene già alcuni dati. La maggior parte dei valori qui forniti sono opzioni bash e non hanno nulla a che fare con le variabili di ambiente. Le variabili in questo file sono impostate allo stesso modo della riga di comando:

export VARNAME=valore

Dopo aver inserito tutte le variabili necessarie, chiudere il file. La prossima volta che viene avviata una sessione di shell, le variabili impostate qui verranno lette e passate all'ambiente della shell. Per indicare alla sessione corrente di leggere il file specificato, digitare:

sorgente ~/.bashrc

Per impostare variabili a livello di sistema, aggiungile a /etc/profile, /etc/bash.bashrc o /etc/environment.

Risultati

Shell e variabili di ambiente sono sempre presenti in tutte le sessioni di shell, quindi sapere come lavorarci è particolarmente utile. Possono essere utilizzati per passare le configurazioni dei processi principali ai processi secondari, nonché per configurare le impostazioni al di fuori dei file.

In determinate situazioni, ciò offre una serie di vantaggi. Ad esempio, alcuni meccanismi di distribuzione si basano su variabili di ambiente per impostare le informazioni di autenticazione. Questo è conveniente, poiché dati così importanti non verranno archiviati in nessun file, il che significa che saranno protetti in modo affidabile da estranei.

Esistono molte altre situazioni più comuni in cui potrebbe essere necessario leggere le variabili o modificare l'ambiente del sistema. Gli strumenti e i metodi descritti in questo tutorial sono un'ottima base per sviluppare abilità nel lavorare con le variabili e usarle correttamente.

Tag: ,

Il concetto di parametro in una shell bash simile al concetto di variabile nei linguaggi di programmazione convenzionali. Il nome del parametro (o identificatore) può essere una parola composta da caratteri alfabetici, cifre e trattini bassi (solo il primo carattere di questa parola non può essere una cifra), un numero o uno dei seguenti caratteri speciali: * , @ , # , ? , - (trattino), $ , ! , 0 , _ (sottolineare).

Un parametro si dice impostato o impostato se gli è stato assegnato un valore. Il valore può anche essere una stringa vuota. Per visualizzare il valore di un parametro, utilizzare il simbolo $ prima del suo nome. Sì, la squadra

$nome eco

mostra la parola nome, e il comando

$eco $nome

restituirà il valore della variabile name (se impostata, ovviamente).

5.6.1 Variazioni dei parametri

I parametri sono suddivisi in tre classi: parametri posizionali, parametri speciali(i cui nomi sono i caratteri speciali appena elencati) e variabili di shell.

Nomi (identificatori) parametri posizionali consiste di una o più cifre (ma non un singolo zero). I valori dei parametri posizionali sono gli argomenti che sono stati dati all'avvio della shell (il primo argomento è il valore del parametro posizionale 1, ecc.). È possibile modificare il valore di un parametro posizionale utilizzando il comando integrato impostato. I valori di questi parametri vengono modificati anche mentre la shell esegue una delle funzioni (questo sarà discusso di seguito, in sec. 5.8).

Opzioni speciali sono modelli la cui sostituzione (sostituzione) viene eseguita come segue.

Tabella 5.2. Opzioni speciali.

Parametro

Regole di sostituzione

Sostituito da parametri posizionali, a partire dal primo. Se la sostituzione avviene tra virgolette, questo parametro viene sostituito da una singola parola composta da tutti i parametri posizionali, separati dal primo carattere della variabile IFS speciale (che verrà discussa in seguito). Cioè, ``$*"" equivale a ``$1c$2c..."", dove c è il primo carattere nel valore della variabile IFS. Se IFS è nullo o non impostato, le opzioni sono separate da spazi

Sostituito da parametri posizionali, a partire dal primo. Se la sostituzione avviene tra virgolette, ogni parametro viene sostituito da una parola separata. Quindi, `` [email protetta]"" equivale a ""$1"" ""$2"" ... Se non ci sono parametri posizionali, non viene assegnato alcun valore (il parametro @ viene semplicemente rimosso)

Sostituito con il valore decimale del numero di parametri posizionali

Sostituito dallo stato di uscita dell'ultimo canale di programma in esecuzione in primo piano

(trattino)

Sostituito con l'attuale set di valori di flag impostato con il comando integrato impostato o quando si avvia la shell stessa

Sostituito dall'ID processo (P ID) della shell

Sostituito dall'ID processo (P ID) dell'ultimo comando in esecuzione in background (eseguito in modo asincrono).

Sostituito con il nome della shell o dello script in esecuzione. Se bash viene avviato per eseguire un file batch, $0 è uguale al nome di questo file. In caso contrario, questo valore è uguale al percorso completo della shell

(sottolineare)

Sostituito dall'ultimo argomento del comando precedente eseguito (se si tratta di un parametro o di una variabile, il suo valore viene sostituito)

I parametri speciali elencati nella tabella precedente differiscono in quanto possono essere solo referenziati; non puoi assegnare loro valori.

Variabile dal punto di vista della shell, questo è il parametro indicato dal nome. I valori vengono assegnati alle variabili utilizzando il seguente operatore

$nome=valore

dove nomeè il nome della variabile e valore— il valore ad esso assegnato (può essere una stringa vuota). Un nome di variabile può essere composto solo da numeri e lettere e non può iniziare con un numero. Il valore può essere qualsiasi testo. Se il valore contiene caratteri speciali, deve essere racchiuso tra virgolette. Il valore assegnato non contiene queste virgolette, ovviamente. Se la variabile è impostata, può essere rimossa utilizzando il comando shell integrato non settato.

L'insieme di tutte le variabili della shell impostate con i valori assegnati è chiamato ambiente o ambiente della shell. Puoi visualizzarlo con il comando impostato senza parametri (solo, forse, è necessario organizzare una pipeline "imposta|meno"). L'output di questo comando elenca tutte le variabili d'ambiente in ordine alfabetico Per visualizzare il valore di una particolare variabile, invece di usare il comando impostato(nell'output di cui è ancora da cercare e ricercare la variabile desiderata) è possibile utilizzare il comando

$eco $nome

(anche se in questo caso devi conoscere il nome della variabile che ti interessa).

Tra le variabili che vedrai nell'output del comando impostato, ci sono alcune variabili molto interessanti. Prestare attenzione, ad esempio, alla variabile RANDOM. Se esegui il comando più volte di seguito

$ eco $RANDOM

otterrai un nuovo valore ogni volta. Il fatto è che questa variabile restituisce un numero intero casuale compreso nell'intervallo 0 - 32.768.

5.6.2 Prompt della shell

Una delle variabili molto importanti è denominata PS1. Questa variabile specifica il tipo di prompt che bash stampa quando è in attesa del comando successivo dall'utente. Per impostazione predefinita, questa variabile è impostata su "\s-\v\$". In realtà dentro bash Ci sono quattro prompt che vengono utilizzati in diverse situazioni. Variabile PS1 specifica il tipo di stringa di richiesta che viene emessa quando la shell è in attesa di un comando. Prompt secondario impostato da variabile PS2, appare quando la shell attende che l'utente inserisca altri dati necessari per la continuazione del comando o del programma in esecuzione. Variabile predefinita PS2 ha il significato " >" . Potresti aver già visto questo prompt quando hai eseguito il comando gatto per inserire i dati dalla tastiera in un file. Un altro esempio è il comando ftp, dopo il lancio del quale l'invito assume anche questa forma.

Prompt variabile PS3, utilizzato nel comando Selezionare. Prompt variabile PS4, stampato prima di ogni comando, nel momento in cui bash controlla i progressi. Il valore predefinito è " + ".

Se hai un tale desiderio, puoi cambiare il tipo di variabili PS1 e PS2. In questo caso, è possibile utilizzare qualsiasi carattere inserito dalla tastiera o un certo numero di caratteri speciali che, quando si forma la stringa di richiesta, vengono decodificati secondo la tabella. 5.3 (ne vengono forniti solo alcuni, ad esempio; vedere la pagina man dell'utilità per un elenco completo bash) .

Tabella 5.3. Caratteri speciali per formare un invito

Simbolo

Il suo significato

Segnale acustico (codice ASCII 07)

Una data nel formato Giorno, Mese, Giorno, ad esempio mercoledì, 17 ottobre.

Nome host fino al primo punto

Nome host completo

Ora attuale nel formato 24 ore: HH:MM:SS (ore:minuti:secondi)

Ora attuale nel formato 12 ore: HH:MM:SS

Ora attuale nel formato 12 ore am/pm

Il nome dell'utente che ha avviato la shell

Nome completo della directory di lavoro corrente (a partire dalla radice)

Directory di lavoro corrente (nessun percorso specificato)

Il carattere # se la shell è in esecuzione come superutente e il $ se la shell viene avviata da un utente normale.

\nnn

Carattere con codice ottale nnn

Nuova riga (avanzamento riga)

Nome della conchiglia

Numero della squadra attuale

Barra rovesciata (una barra rovesciata)

Inizio di una sequenza di caratteri non stampabili (questo carattere può essere utilizzato per includere una sequenza di caratteri di controllo del terminale nel testo del prompt)

Fine della sequenza di caratteri non stampabili

Il numero di sequenza di questo comando nella cronologia dei comandi

Il numero del comando corrente (il numero di sequenza del comando in esecuzione nella sessione corrente) può differire dal numero di questo comando nell'elenco della cronologia dei comandi, poiché quest'ultimo include i comandi che sono stati salvati nel file della cronologia dei comandi.

Dopo che il valore di una variabile che definisce un suggerimento è stato letto dalla shell, è possibile effettuare sostituzioni in essa secondo le regole dell'espansione dei parametri, delle sostituzioni nei nomi dei comandi e delle espressioni aritmetiche e della suddivisione delle parole. Queste regole saranno discusse di seguito nella Sez. 5.7.

Ad esempio, dopo aver eseguito il comando (poiché c'è uno spazio nella stringa, le virgolette sono obbligatorie)

# PS1="[\ [email protetta]\h \W]\$"

il prompt standard visualizzerà una parentesi quadra, nome utente, simbolo @ , nome del computer, spazio, nome della directory corrente (nessun percorso), parentesi quadre di chiusura e simbolo $ (se un utente semplice è in esecuzione nella shell) o # (se la shell è in esecuzione come root).

5.6.3 Variabile SENTIERO

Un'altra variabile molto importante è denominata SENTIERO. Specifica un elenco di percorsi per le directory in cui bash cerca i file (in particolare, i file con i comandi) nei casi in cui il percorso completo del file non è specificato nella riga di comando. Le singole directory in questo elenco sono separate da due punti. Variabile predefinita SENTIERO include directory /usr/local/bin, /bin, /usr/bin, /usr/X11R6/bin, cioè ha la forma:

/usr/local/bin:/bin:/usr/bin:/usr/X11R6/bin:

Per aggiungere una directory a questo elenco, eseguire il comando seguente:

# PERCORSO=$PERCORSO:nuovo_percorso.

Durante la ricerca, la shell ricerca le directory esattamente nell'ordine in cui sono elencate nella variabile PATH.

Nota che puoi anche includere la directory corrente in questo elenco aggiungendo un punto alla variabile PATH. Tuttavia, questo non è raccomandato per motivi di sicurezza: un utente malintenzionato può inserire nella directory pubblica un comando che ha lo stesso nome di uno dei comandi eseguiti frequentemente dall'utente root, ma esegue azioni completamente diverse (soprattutto se la directory corrente è in l'inizio dell'elenco dei percorsi di ricerca).

5.6.4 Variabile IFS

Questa variabile specifica il separatore di campo interno utilizzato nell'operazione di suddivisione in parole delle conversioni della riga di comando eseguita dalla shell prima dell'esecuzione della riga di comando. Il valore predefinito di questa variabile è "<Пробел><Символ_ новой_ строки>".

5.6.5 Directory correnti e home

Il nome della directory corrente è memorizzato in una variabile di ambiente (denominata PWD) e il valore di questa variabile viene modificato ogni volta che si avvia il programma. cd(e anche quando si cambia la directory corrente in qualsiasi altro modo, ad esempio tramite Midnight Commander).

Allo stesso modo, il nome completo (con percorso) della home directory dell'utente che ha avviato il processo viene memorizzato nella variabile HOME.

5.6.6 Comando esportare

Quando una shell esegue un programma o un comando, passa loro alcune delle variabili di ambiente. Affinché una variabile di ambiente possa essere passata a un processo avviato da una shell, deve essere impostata utilizzando un comando speciale esportare, cioè invece di

$nome=valore

dovrebbe essere scritto

$ esportazione nome=valore

In questo caso, tutti i programmi lanciati dalla shell (comprese le istanze secondarie della shell stessa) avranno accesso alle variabili così definite, ovvero potranno chiamare i loro valori per nome.

V. Kostromin (kos at rus-linux dot net) - 5.6. Parametri e variabili. Ambiente shell

Pubblicazioni correlate