Cosa fa il comando "esporta"?


85

Sono un po 'nuovo su Linux e mi capita di eseguire alcuni comandi alla cieca, per fare le cose. Ho pensato che non sarebbe stato uno spreco fare questo tipo di domande, dal momento che più persone nuove avrebbero una conoscenza regolare di quelle.

Ho iniziato a lavorare con Jenkins di recente e poi ho dovuto usare questo exportcomando per eseguire l' archivio di guerra di Jenkins . Quindi avevo bisogno di sapere cosa exportfa il comando in generale e perché è necessario eseguire questo comando, durante l'esecuzione di Jenkins (dopo che la home di Jenkins è stata impostata).

Grazie!


1
Sarebbe utile se tu dicessi di più sul comando di esportazione che hai usato. Senza più contesto, immagino che stavi impostando una variabile d'ambiente. Vedi en.wikipedia.org/wiki/Environment_variable#Unix
Joshua D. Boyd


possibile duplicato del comando di esportazione unix
John Kugelman

Risposte:


99

exportin she nelle shell correlate (come bash), contrassegna una variabile di ambiente da esportare nei processi figlio, in modo che il figlio li erediti.

exportè definito in POSIX :

La shell assegnerà l'attributo export alle variabili corrispondenti ai nomi specificati, il che farà sì che siano nell'ambiente dei comandi eseguiti successivamente. Se il nome di una variabile è seguito da = parola, il valore di quella variabile deve essere impostato su parola.


Molte grazie! Tutte le tue risposte sono state davvero utili e ti guidano per imparare anche qualche altra cosa! :-)
Chathura Kulasinghe

1
Cos'è un processo figlio in questo senso?
Zinan Xing,

13
Non capisco
Martin Hansen

@MartinHansen cosa non capisci? inoltre, vedi la mia risposta.
barlop

C'è una parentesi quadra in più alla fine del collegamento, non posso modificarla, perché è una modifica con un solo simbolo :)
Radoslav Stoyanov

27

Immagino tu provenga da uno sfondo di Windows. Quindi li confronterò (anch'io sono un po 'nuovo su Linux). Ho trovato la risposta dell'utente al mio commento, utile per capire le cose.

In Windows, una variabile può essere permanente o meno. Il termine Variabile d'ambiente include una variabile impostata nella shell cmd con il comando SET, così come quando la variabile è impostata all'interno della GUI di Windows, quindi impostata nel registro, e diventa visualizzabile in nuove finestre cmd. es. documentazione per il comando set in Windows https://technet.microsoft.com/en-us/library/bb490998.aspx "Visualizza, imposta o rimuove le variabili di ambiente. Utilizzato senza parametri, set visualizza le impostazioni di ambiente correnti." In Linux, set non mostra le variabili d'ambiente, mostra le variabili di shell che non chiama / fa riferimento come variabili d'ambiente. Inoltre, Linux non usa set per impostare le variabili (a parte i parametri posizionali e le opzioni di shell, che spiego come una nota alla fine), solo per visualizzarli e anche in questo caso solo per visualizzare le variabili di shell. Windows usa set per l'impostazione e la visualizzazione, ad esempio set a = 5, linux no.

In Linux, immagino che potresti creare uno script che imposta le variabili all'avvio, ad esempio /etc/profileo /etc/.bashrcma altrimenti, non sono permanenti. Sono memorizzati nella RAM.

C'è una distinzione in Linux tra variabili di shell e variabili di ambiente. In Linux, le variabili di shell sono solo nella shell corrente e le variabili di ambiente sono in quella shell e in tutte le shell secondarie.

È possibile visualizzare le variabili di shell con il setcomando (anche se si noti che, a differenza di Windows, le variabili non sono impostate in Linux con il comando set).

set -o posix; set (fare questo set -o posix una volta per primo, aiuta a non visualizzare troppe cose non necessarie). Quindi setvisualizza le variabili di shell.

È possibile visualizzare le variabili di ambiente con il envcomando

le variabili di shell sono impostate ad esempio con just a = 5

le variabili d'ambiente sono impostate con export, export imposta anche la variabile shell

Qui puoi vedere la variabile di shell zzz impostata con zzz = 5, e vedi che viene mostrata durante l'esecuzione setma non come variabile d'ambiente.

Qui vediamo yyy impostato con export, quindi è una variabile d'ambiente. E vedi che mostra sotto sia le variabili di shell che le variabili di ambiente

$ zzz=5

$ set | grep zzz
zzz=5

$ env | grep zzz

$ export yyy=5

$ set | grep yyy
yyy=5

$ env | grep yyy
yyy=5

$

altri thread utili

/unix/176001/how-can-i-list-all-shell-variables

/ubuntu/26318/environment-variable-vs-shell-variable-whats-the-difference

Nota- un punto che elabora un po 'ed è in qualche modo correttivo a quello che ho scritto, è che, in bash linux,' set 'può essere usato per impostare "parametri posizionali" e "opzioni / attributi della shell", e tecnicamente entrambi quelle sono variabili, sebbene le pagine man potrebbero non descriverle come tali. Ma ancora, come accennato, set non imposterà variabili di shell o variabili di ambiente). Se lo fai set asdf, imposta $ 1 su asdf, e se lo fai echo $1vedi asdf. Se fateset a=5non imposterà la variabile a, uguale a 5. Imposterà il parametro posizionale $ 1 uguale alla stringa di "a = 5". Quindi se hai mai visto impostare a = 5 in Linux è probabilmente un errore a meno che qualcuno non volesse effettivamente quella stringa a = 5, in $ 1. L'altra cosa che il set di Linux può impostare sono le opzioni / attributi della shell. Se imposti -o ne vedrai un elenco. E puoi fare ad esempio set -o verbose, off, per attivare verbose (btw il valore predefinito sembra essere disattivato ma questo non fa differenza in questo). Oppure puoi fare set +o verboseper disattivare verbose. Windows non ha tale utilizzo per il suo comando set.


sembra che set mostri shell e ambiente, e 'env' mostra solo ambiente
barlop

1
Mi piace molto questa risposta poiché copre casi nix vs win che possono essere fonte di confusione all'inizio.
Niente

6

In termini semplici, le variabili di ambiente vengono impostate quando si apre una nuova sessione di shell. In qualsiasi momento, se modifichi uno dei valori delle variabili, la shell non ha modo di selezionare tale modifica. ciò significa che le modifiche apportate diventano effettive nelle nuove sessioni della shell. Il exportcomando, d'altra parte, fornisce la possibilità di aggiornare la sessione corrente della shell sulla modifica apportata alla variabile esportata. Non è necessario attendere la nuova sessione della shell per utilizzare il valore della variabile modificata.


1
Ma se lo dico, a=5allora echo $adice 5. Eppure hai scritto "in qualsiasi momento se modifichi uno qualsiasi dei valori delle variabili, la shell non ha modo di selezionare quella modifica. Ciò significa che le modifiche apportate diventano effettive nelle nuove sessioni di shell." . <- Allora come ha fatto ad aggiornare la sessione della shell senza un'esportazione. Puoi fare un esempio in cui è necessaria l'esportazione?
barlop

La variabile impostata durante una sessione di shell è una variabile di shell. è locale e accessibile alla sessione corrente della shell. puoi cambiarlo in qualsiasi momento lo desideri e il suo valore corrente sarà disponibile per il processo di shell corrente senza la necessità di esportare le modifiche. d'altra parte le variabili ambientali vengono impostate al momento del login. quando si modifica uno qualsiasi dei loro valori, è necessario eseguire quello che in termini semplici sarebbe un aggiornamento rendendo il nuovo valore disponibile sia per il processo della shell corrente che per qualsiasi nuovo processo figlio. questo è esattamente ciò che fa l'esportazione.
katwekibs
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.