Articles

Linux Set Environment Variable Command Tutorial

La shell Bash è usata per vari scopi sotto Linux. Come posso personalizzare la variabile d’ambiente della shell sotto i sistemi operativi Linux? Come posso impostare e visualizzare la variabile d’ambiente su Linux?
È possibile utilizzare le variabili di shell per memorizzare i dati, impostare le opzioni di configurazione e personalizzare l’ambiente della shell sotto Linux. La shell predefinita è Bash sotto Linux e può essere utilizzata per i seguenti scopi:

  1. Configurare l’aspetto della shell.
  2. Impostare il percorso di ricerca come JAVA_HOME e ORACLE_HOME.
  3. Creare variabili d’ambiente come richiesto dai programmi.
  4. Esegui i comandi che vuoi eseguire ogni volta che entri o esci.
  5. Imposta alias e/o funzioni di shell per automatizzare i compiti e risparmiare tempo.
  6. Cambia il prompt di bash.
  7. Imposta le opzioni di shell.

Due tipi di variabili di shell

  • Variabili di ambiente (GLOBALE): In genere, gli utenti finali non dovrebbero pasticciare con le variabili d’ambiente perché sono disponibili a livello di sistema, e le subshell e i processi figli possono accedervi. In certi scenari, possiamo modificarle secondo le nostre esigenze. Per esempio, impostiamo un percorso a livello di sistema per l’applicazione JAVA o PATH per cercare i binari. In quasi tutti i casi, usiamo il comando export per definire o modificare le variabili d’ambiente.
  • Shell e variabili definite dall’utente (LOCAL): come suggerisce il nome, queste sono definite dagli utenti e si applicano attualmente alla sessione di shell corrente.

Puoi usare i seguenti comandi per visualizzare e configurare l’ambiente.

Visualizza le variabili d’ambiente correnti su Linux

Il comando printenv mostra tutte o le variabili d’ambiente date. Aprire il prompt del terminale e poi digitare:
printenv
printenv VAR_NAME
printenv PS1
printenv ORACLE_HOME
printenv JAVA_HOME
# use the grep command/egrep command to filter out variables #
printenv | grep APP_HOME
printenv | egrep 'APP_HOME|DOCKER_HOME|NIX_BACKUP_HOST'

comando env

Il comando env esegue un comando Linux con un ambiente modificato. La sintassi è:

env VAR_NAME=VALUEenv VAR_NAME=VALUE CMD1 ARG1env VAR_NAME=VALUE CMD1 ARG1

Si noti che se non viene specificato alcun nome di comando dopo le specifiche dell’ambiente, l’ambiente risultante viene visualizzato sullo schermo. Questo è come specificare il comando printenv come discusso in precedenza. Per esempio:

envenv | moreenv | grep 'PS1'

Come impostare ed elencare le variabili di ambiente in Linux usando il comando set

Il comando env/printenv visualizza solo le variabili di ambiente della shell Linux. E se avete bisogno di vedere una lista di tutte le variabili, incluse quelle della shell, dell’ambiente e delle funzioni della shell definite dall’utente? Provate il seguente comando set per stampare le variabili d’ambiente:
set
set | grep BASH

Ecco cosa vediamo:

BASH=/bin/bashBASH_ARGC=()BASH_ARGV=()BASH_LINENO=()BASH_SOURCE=()BASH_VERSINFO=(="3" ="2" ="25" ="1" ="release" ="x86_64-redhat-linux-gnu")BASH_VERSION='3.2.25(1)-release'COLORS=/etc/DIR_COLORS.xtermCOLUMNS=237CVS_RSH=sshDIRSTACK=()EUID=0GROUPS=()G_BROKEN_FILENAMES=1HISTFILE=/root/.bash_historyHISTFILESIZE=1000HISTSIZE=1000HOME=/rootHOSTNAME=server3.www.p.cyberciti.bizHOSTTYPE=x86_64IFS=$' \t\n'INPUTRC=/etc/inputrcLANG=en_US.UTF-8LESSOPEN='|/usr/bin/lesspipe.sh %s'LINES=64LOGNAME=rootLS_COLORS='no=00:fi=00:di=00;34:ln=00;36:pi=40;33:so=00;35:bd=40;33;01:cd=40;33;01:or=01;05;37;41:mi=01;05;37;41:ex=00;32:*.cmd=00;32:*.exe=00;32:*.com=00;32:*.btm=00;32:*.bat=00;32:*.sh=00;32:*.csh=00;32:*.tar=00;31:*.tgz=00;31:*.arj=00;31:*.taz=00;31:*.lzh=00;31:*.zip=00;31:*.z=00;31:*.Z=00;31:*.gz=00;31:*.bz2=00;31:*.bz=00;31:*.tz=00;31:*.rpm=00;31:*.cpio=00;31:*.jpg=00;35:*.gif=00;35:*.bmp=00;35:*.xbm=00;35:*.xpm=00;35:*.png=00;35:*.tif=00;35:'MACHTYPE=x86_64-redhat-linux-gnuMAIL=/var/spool/mail/rootMAILCHECK=60OPTERR=1OPTIND=1OSTYPE=linux-gnuPATH=/usr/kerberos/sbin:/usr/kerberos/bin:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/binPIPESTATUS=(="0")PPID=35469PROMPT_COMMAND='echo -ne "\033]0;${USER}@${HOSTNAME%%.*}:${PWD/#$HOME/~}"; echo -ne "\007"'PS1='\$ 'PS2='> 'PS4='+ 'PWD=/rootSHELL=/bin/bashSHELLOPTS=braceexpand:emacs:hashall:histexpand:history:interactive-comments:monitorSHLVL=1SSH_CLIENT='10.1.3.116 44212 22'SSH_CONNECTION='10.1.3.116 44212 10.10.29.68 22'SSH_TTY=/dev/pts/0TERM=xtermUID=0USER=root_=setconsoletype=ptytmpid=0genpasswd () { local l=$1; && l=16; tr -dc A-Za-z0-9_ < /dev/urandom | head -c ${l} | xargs}xrpm () { && ( rpm2cpio "$1" | cpio -idmv )}

La $PATH definisce il percorso di ricerca dei comandi. È una lista separata da due punti di directory in cui la shell cerca i comandi. Il $PS1 definisce le vostre impostazioni di prompt.Vedere la lista di tutte le variabili di shell comunemente usate per maggiori informazioni. Puoi visualizzare il valore di una variabile usando il comando printf o il comando echo:

echo "$HOME"echo "$PS1"printf "%s\n" "$HOME"

Output dell’ultimo comando che visualizza la posizione della mia directory home impostata dalla variabile d’ambiente $HOME su Linux:
/home/vivek

Impostazione delle variabili d’ambiente su comando Linux

La sintassi è abbastanza semplice:

# A variable may be assigned to by a statement of the form #VAR_NAME=valueVAR_STR="this is a string"VAR_NUM_TRY=5MY_OS="Ubuntu"DOMAIN_NAME="cyberciti.biz|nixcraft.com" # If value is not given, the variable is assigned the null string.is_backup_failed= # Empty variable sql_tables="" # Boolean (true or false)is_job_failed=false

Alcuni punti chiave da ricordare quando si creano o si impostano variabili d’ambiente su Linux quando si usa bash:

  1. Non mettere spazio intorno al simbolo =.
  2. Come i comandi di Linux, i nomi delle variabili di bash sono sensibili alle maiuscole. In genere si definiscono le variabili d’ambiente solo con nomi in MAIUSCOLO e sono considerate una buona pratica, ma questo non è richiesto.
  3. Di default, lo scopo delle variabili di Linux è LOCALE. Possiamo renderle GLOBALI (o variabili d’ambiente) usando il comando export.

Stampiamo i valori delle nostre VAR_NUM, VAR_NUM, MY_OS, e altre variabili definite in precedenza usando vari comandi:

echo "$VAR_NUM"echo "$MY_OS"printf "%s\n" "$DOMAIN_NAME"echo $is_backup_failed

Sistemazione / rimozione di variabili e valori di shell

Possiamo disinserire valori e attributi di variabili e funzioni di shell utilizzando il comando unset:

unset var_nameunset MY_OSunset is_backup_failed

Come impostare variabili di ambiente in sola lettura in Linux quando si usa bash

Utilizziamo il comando readonly come segue:

readonly var=valuereadonly PI=3.14export PI # Make it enviorment/global var echo "$PI"PI=4.2bash -c "echo $PI"unset PI
Bash imposta una variabile di sola lettura su comando Linux

Impostare una variabile immutabile di sola letturasolo variabile di bash sul mio desktop Ubuntu Linux

Accedere alle variabili definite dall’utente nelle sub-shell e in altre istanze

Avviamo una nuova istanza di bash, entrare e provare a stampare i valori come segue:

# 1. Define mysql_bak_dest and _mysql_dump variables mysql_bak_dest="/aws/efs"_mysql_dump="/usr/bin/mysqldump" # 2. Print 'mysql_bak_dest' and '_mysql_dump' variablesecho "$mysql_bak_dest" echo "$_mysql_dump" # 3. start a new shell bash # 4. Can you print 'mysql_bak_dest' and '_mysql_dump' variables ?echo "$mysql_bak_dest" echo "$_mysql_dump" # 5. Exit and go back parent shell session and print 'mysql_bak_dest' and '_mysql_dump' variablesexit echo "$mysql_bak_dest" echo "$_mysql_dump" # 6. Can you use the printenv to print 'mysql_bak_dest', '_mysql_dump', 'HOME' variable ?printenv mysql_bak_destprintenv $_mysql_dumpprintenv HOME
Come impostare ed elencare le variabili d'ambiente in Linux

Impostare ed elencare le variabili LOCALI d’ambiente su Linux

Al passo # 4, l’output è vuoto. Ma perché? Significa che le variabili che abbiamo definito non sono variabili d’ambiente, e sono LOCALI. In una sub-shell e in altre nuove istanze della shell, i valori delle variabili non vengono esportati. Quindi, usiamo il comando export per renderle GLOBALI o variabili d’ambiente. Per esempio:

export var=value# make them GLOBAL or environment variable export mysql_bak_dest="/aws/efs"export _mysql_dump="/usr/bin/mysqldump"echo "$mysql_bak_dest" echo "$_mysql_dump"# Start a new sub-shell or instance by tping the 'bash' and try to access GLOBAL or environment vars bash -c "echo $mysql_bak_dest; echo $_mysql_dump"

Come impostare le variabili di ambiente in Linux

Impostare variabili d’ambiente (GLOBALI) in Linux usando export per la sessione bash dell’utente corrente ed esportata

comando export

Puoi modificare ogni variabile ambientale o di sistema usando il comando export. Imposta la variabile d’ambiente PATH per includere la directory dove hai installato la directory bin con gli script perl e shell:

export PATH=${PATH}:/home/vivek/bin

O

export PATH=${PATH}:${HOME}/bin

Per impostare la variabile d’ambiente JAVA_HOME sulla directory in cui è stata installata l’applicazione J2SE SDK, inserire:

export PATH=${PATH}:/usr/java/jdk1.5.0_07/bin

Puoi impostare più percorsi come segue:

export ANT_HOME=/path/to/ant/direxport PATH=${PATH}:${ANT_HOME}/bin:${JAVA_HOME}/bin

Una nota su env e l’impostazione delle variabili

Prima imposta la variabile NFS_ROOT su /efs/ec2/wwwdata ed esegui lo script perl chiamato check_for_files.pl
env NFS_ROOT=/efs/ec2/wwwdata check_for_files.pl
In questo esempio, eseguire ‘vim’ con l’ambiente contenente ‘LOGNAME=nixcraft’,e ‘DISPLAY=desktop2:0’:
env - DISPLAY=desktop2:0 LOGNAME=nixcraft vim /path/to/file
Impostare FOO su bar e stamparlo con perl:
env - FOO=bar /usr/bin/perl -e 'print "$FOO \n"'
Non possiamo vedere $FOO dalla shell perché è stato definito solo per il codice perl:
echo "$FOO"

Come posso rendere permanenti tutte le impostazioni delle variabili d’ambiente su Linux?

Il file ~/.bash_profile ($HOME/.bash_profile) o ~/.profile viene eseguito quando si effettua il login tramite console o da remoto tramite ssh. Digitare il seguente comando per modificare il file ~/.bash_profile, inserire:
$ vi ~/.bash_profile
Applicare le impostazioni $PATH, inserire:
export PATH=${PATH}:${HOME}/bin
Salvare e chiudere il file.

Imposta il nome dell’istanza IBM DB2

Digita il seguente comando:

export DB2INSTANCE=prod_sales

Una nota sul file /etc/profile

/etc/profile o /etc/profile.d/ contiene l’ambiente del sistema Linux e i programmi di avvio. È usata da tutti gli utenti con le shell bash, ksh, sh. Di solito viene usata per impostare la variabile PATH, i limiti dell’utente e altre impostazioni per l’utente. Funziona solo per la shell di login. Se vuoi fare grandi cambiamenti o modifiche specifiche all’applicazione usa /etc/profile.d/ directory come spiegato qui e qui.
Vedi le seguenti risorse:

  • Personalizza gli ambienti della shell bash dal wiki dello scripting della shell Linux.
  • UNIX Set Environment Variable
File Scopo Esempi (usare il cat per visualizzare un file)
/etc/ambiente Imposta le variabili d’ambientevariabili d’ambiente a livello di sistema.
PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin"
/etc/profile Linux system-wide .per la shell Bourne (sh) e le shell Bourne compatibili come bash, ksh, ash e altre.
if ; then if && ; then # The file bash.bashrc already sets the default PS1. # PS1='\h:\w\$ ' if ; then . /etc/bash.bashrc fi else if ; then PS1='# ' else PS1='$ ' fi fifi if ; then for i in /etc/profile.d/*.sh; do if ; then . $i fi done unset ifi
/etc/profile.d/ Tutte le personalizzazioni dell’ambiente specifiche dell’utente e del sito dovrebbero essere messe in questa directory. Questo è anche a livello di sistema. $ ls -l /etc/profile.d/
$ cat /etc/profile.d/gawk.csh

gawkpath_default () {unset AWKPATHexport AWKPATH=`gawk 'BEGIN {print ENVIRON}'`} gawkpath_prepend () { && AWKPATH=`gawk 'BEGIN {print ENVIRON}'`export AWKPATH="$*:$AWKPATH"} gawkpath_append () { && AWKPATH=`gawk 'BEGIN {print ENVIRON}'`export AWKPATH="$AWKPATH:$*"} gawklibpath_default () {unset AWKLIBPATHexport AWKLIBPATH=`gawk 'BEGIN {print ENVIRON}'`} gawklibpath_prepend () { && \AWKLIBPATH=`gawk 'BEGIN {print ENVIRON}'`export AWKLIBPATH="$*:$AWKLIBPATH"} gawklibpath_append () { && \AWKLIBPATH=`gawk 'BEGIN {print ENVIRON}'`export AWKLIBPATH="$AWKLIBPATH:$*"}
$HOME/.bash_profile Il file di inizializzazione personale, eseguito per le shell di login.
/usr/bin/keychain /root/.ssh/id_ed25519source /root/.keychain/$HOSTNAME-sh
$HOME~/.bashrc Il file di avvio individuale per ogni shell interattiva.
PS1='${debian_chroot:+($debian_chroot)}\h:\w\$ 'umask 022export LS_OPTIONS='--color=auto'export PATH="$HOME:/home/vivek/bin"eval "`dircolors`"alias ls='ls $LS_OPTIONS'alias ll='ls $LS_OPTIONS -l'alias l='ls $LS_OPTIONS -lA'alias rm='rm -i'alias cp='cp -i'alias mv='mv -i'
$HOME/.bash_logout Il file di pulizia della singola shell di login, eseguito quando una shell di login esce
if ; then && /usr/bin/clear_console -qfi

Riassumendo

Hai imparato come impostare ed elencare le variabili d’ambiente su Linux quando usi bash:

Comando Descrizione Esempio(i)
declare comando Dichiarare variabili bash e dare loro attributi come interi, array indicizzati, array associativi, readonly e così via Se non vengono date variabili o opzioni da dichiarare, verranno visualizzati gli attributi e i valori di tutte (variabili uguali a quelle impostate in esecuzione) Vedi ‘help declare’

declaredeclare | grep BASHdeclare | grep function_name# Make sure str_size have the 'integer' attribute declare -i db_size=20echo $db_size # will print 20db_size="foo"echo $db_size # will print 0 # Set max size for linux container and make it read-only too declare -ir MAX_MEM_FOR_CONTAINER=4096
comando env Esegui un programma in un ambiente modificato. Stampa tutte le variabili d’ambiente.
envenv | moreenv | grep SERVER_ROOT
comando export Comando che imposta le variabili d’ambiente (GLOBAL) ed esporta l’ambiente in una sub-shell o altre istanze. export NFS_ROOT=/aws/ec2/efs
comando printintenv Stampa di tutte o parte (date) delle variabili di ambiente su Linux.
printenv SHELLprintenvprintenv | egrep 'SHELL|PS1|PS2'
comandoreadonly Marcare le variabili di shell come immutabili cioè variabile di shell di sola lettura o costante
readonly K_VERSION="1.9.52"
comando set Imposta o annulla i valori delle opzioni di shell e dei parametri posizionali. Inoltre, visualizza tutte le variabili d’ambiente. Vedi ‘aiuto set’

set | moreMY_DOMAINS="cyberciti.biz:nixcraft.com:cyberciti.com"IFS=':'set -- $MY_DOMAINSecho "$1"echo "$2"echo "$3"for d in $@do echo "Working on $d ..."done
comando unset Rimuove le variabili di shell e di ambiente. Non tutte le variabili possono essere disinserite. Per esempio, le variabili di sola lettura non possono essere disinserite. unset FOO

🐧 Ricevi gli ultimi tutorial su Linux, Open Source & DevOps via RSS feed o newsletter settimanale via email.
🐧 23 commenti finora… aggiungine uno ↓

Categoria Elenco di comandi Unix e Linux
Gestione dei file cat
Firewall Alpine Awall – CentOS 8 – OpenSUSE – RHEL 8 – Ubuntu 16.04 – Ubuntu 18.04 – Ubuntu 20.04
Utilità di rete dig – host – ip – nmap
OpenVPN CentOS 7 – CentOS 8 – Debian 10 – Debian 8/9 – Ubuntu 18.04 – Ubuntu 20.04
Package Manager apk – apt
Gestione Processi bg – chroot – cron – disown – fg – jobs – killall – kill – pidof – pstree – pwdx – tempo
Ricerca grep – whereis – quale
Informazioni utente gruppi – id – lastcomm – last – lid/libuser-lid – logname – members – users – whoami – who – w
WireGuard VPN Alpine – CentOS 8 – Debian 10 – Firewall – Ubuntu 20.04

Lascia una risposta

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *