Articles

Linux Set Environment Variable Command Tutorial

Bash shell wordt onder Linux voor verschillende doeleinden gebruikt. Hoe pas ik de omgevingsvariabele van de shell aan onder Linux besturingssystemen? Hoe kan ik onder Linux omgevingsvariabelen instellen en bekijken?
U kunt onder Linux shellvariabelen gebruiken om gegevens op te slaan, configuratieopties in te stellen en de shellomgeving aan te passen. De standaard shell is Bash onder Linux en kan worden gebruikt voor de volgende doeleinden:

  1. Het uiterlijk en gevoel van shell configureren.
  2. Terminalinstellingen instellen, afhankelijk van welke terminal u gebruikt.
  3. Stel het zoekpad in, zoals JAVA_HOME, en ORACLE_HOME.
  4. Maak omgevingsvariabelen aan zoals nodig voor programma’s.
  5. Commando’s uitvoeren die u wilt uitvoeren wanneer u inlogt of uitlogt.
  6. Aliassen en/of shell functie instellen om taken te automatiseren om typewerk en tijd te besparen.
  7. De bash prompt veranderen.
  8. Shell opties instellen.

Twee soorten shell variabelen

  • Omgevingsvariabelen (GLOBAL): Normaal gesproken moeten eindgebruikers niet rommelen met Omgevingsvariabelen, omdat ze systeembreed beschikbaar zijn, en subshells en kindprocessen hebben er toegang toe. In bepaalde scenario’s kunnen we ze aanpassen aan onze behoeften. We stellen bijvoorbeeld een systeembreed pad in voor de JAVA app of PATH voor het zoeken van binaries. In bijna alle gevallen gebruiken we het export commando om omgevingsvariabelen te definiëren of te wijzigen.
  • Shell- en door de gebruiker gedefinieerde variabelen (LOCAL) : Zoals de naam al zegt, worden deze door gebruikers gedefinieerd en zijn ze momenteel van toepassing op de huidige shellsessie.

U kunt de volgende commando’s gebruiken om de omgeving te bekijken en te configureren.

Toon huidige omgevingsvariabelen op Linux

Het commando printv toont alle of de gegeven omgevingsvariabelen. Open de terminal prompt en typ dan:
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'

env commando

Het env commando voert een Linux commando uit met een gewijzigde omgeving. De syntaxis is:

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

Merk op dat als er geen opdrachtnaam wordt opgegeven na de omgevingsspecificaties, de resulterende omgeving op het scherm wordt weergegeven. Dit is hetzelfde als wanneer u de opdracht printenv opgeeft, zoals eerder is besproken. Bijvoorbeeld:

envenv | moreenv | grep 'PS1'

Hoe omgevingsvariabelen in Linux in te stellen en op te sommen met het commando set

Het commando env/printenv geeft alleen de Linux-shell-omgevingsvariabelen weer. Wat als je een lijst van alle variabelen wilt zien, inclusief shell, omgeving, door de gebruiker gedefinieerde shell functies? Probeer het volgende set-commando voor het afdrukken van omgevingsvariabelen:
set
set | grep BASH

Hier ziet u wat we zien:

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 )}

De $PATH definieert het zoekpad voor commando’s. Het is een door dubbele punten gescheiden lijst van mappen waarin de shell naar commando’s zoekt. De $PS1 definieert uw prompt instellingen.Zie de lijst van alle veelgebruikte shell variabelen voor meer informatie. U kunt de waarde van een variabele weergeven met het commando printf of echo:

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

Uitvoer van het laatste commando dat de locatie van mijn thuismap weergeeft, ingesteld door de omgevingsvariabele $HOME onder Linux:
/home/vivek

Omgevingsvariabelen instellen op Linux-commando

De syntaxis is vrij eenvoudig:

# 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

Enige belangrijke punten om te onthouden bij het maken of instellen van omgevingsvariabelen op Linux bij gebruik van bash:

  1. Geef geen spatie rond het = symbool.
  2. Net als Linux-commando’s zijn de namen van de bash-variabelen hoofdlettergevoelig. Gewoonlijk definiëren we omgevingsvariabelen alleen in HOOFDLETTERS en dit wordt beschouwd als best practice, maar dit is niet vereist.
  3. De standaard Linux variabele scope is LOCAL. We kunnen ze GLOBAL (of omgevingsvariabele) maken met het export commando.

Laten we de waarden van onze VAR_NUM, VAR_NUM, MY_OS en andere eerder gedefinieerde variabelen afdrukken met behulp van verschillende commando’s:

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

Shell-variabele en waarden unset / verwijderen

We kunnen waarden en attributen van shell-variabelen en functies unset maken met behulp van het unset-commando:

unset var_nameunset MY_OSunset is_backup_failed

Hoe stel je in Linux alleen-lezen omgevingsvariabelen in bij gebruik van bash

We gebruiken het commando readonly als volgt:

readonly var=valuereadonly PI=3.14export PI # Make it enviorment/global var echo "$PI"PI=4.2bash -c "echo $PI"unset PI
Bash ingesteld op alleen-lezen variabele Linux commando

Het instellen van onveranderlijke alleen-lezenalleen bash variabele op mijn Ubuntu Linux desktop

Toegang tot door gebruiker gedefinieerde variabelen in sub-shells en andere instanties

Laten we een nieuwe instantie van bash starten, enter en probeer als volgt waarden af te drukken:

# 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
Hoe omgevingsvariabelen in te stellen en op te sommen in Linux

LOKALE omgevingsvariabelen in te stellen en op te sommen in Linux

In stap # 4, is de uitvoer leeg. Maar waarom? Dat betekent dat de variabelen die we gedefinieerd hebben geen omgevingsvariabelen zijn, en ze zijn LOKAAL. In een sub-shell en andere nieuwe shell instanties, worden variabelen waarden niet geëxporteerd. Daarom gebruiken we het export commando om ze GLOBAL of omgevingsvariabelen te maken. Bijvoorbeeld:

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"
Hoe omgevingsvariabelen in te stellen in Linux

Het instellen van omgevingsvariabelen (GLOBAL) in Linux met behulp van export voor de huidige en geëxporteerde gebruiker bash sessie

export commando

U kunt elke omgevings- of systeemvariabele wijzigen met behulp van het export commando. Stel de omgevingsvariabele PATH in op de map waarin u de bin-map met perl- en shellscripts hebt geïnstalleerd:

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

Of

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

Om de omgevingsvariabele JAVA_HOME in te stellen op de directory waar u de J2SE SDK-toepassing hebt geïnstalleerd, voert u in:

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

U kunt als volgt meerdere paden instellen:

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

Een opmerking over env en het instellen van variabelen

Stel eerst NFS_ROOT variabele in op /efs/ec2/wwwdata en voer perl script genaamd check_for_files.pl
env NFS_ROOT=/efs/ec2/wwwdata check_for_files.pl
In dit voorbeeld, voer ‘vim’ uit met de omgeving die ‘LOGNAME=nixcraft’,en ‘DISPLAY=desktop2:0’ bevat:
env - DISPLAY=desktop2:0 LOGNAME=nixcraft vim /path/to/file
Stel FOO in op bar en druk het af met perl:
env - FOO=bar /usr/bin/perl -e 'print "$FOO \n"'
We kunnen $FOO niet zien vanuit shell omdat het alleen is gedefinieerd voor perl code:
echo "$FOO"

Hoe maak ik alle omgevingsvariabelen instellingen permanent/permanent op Linux?

Het ~/.bash_profile ($HOME/.bash_profile) of ~/.profile bestand wordt uitgevoerd wanneer u inlogt via console of op afstand via ssh. Typ het volgende commando om het ~/.bash_profile bestand te bewerken, voer in:
$ vi ~/.bash_profile
Voeg de $PATH instellingen toe, voer in:
export PATH=${PATH}:${HOME}/bin
Bewaar en sluit het bestand.

Set IBM DB2 Instance Name

Type het volgende commando:

export DB2INSTANCE=prod_sales

Een opmerking over /etc/profile bestand

/etc/profile of /etc/profile.d/ directory bevat Linux systeemomgevingen en opstartprogramma’s. Het wordt gebruikt door alle gebruikers met bash, ksh, sh shell. Meestal gebruikt om PATH variabele, gebruikerslimieten, en andere instellingen voor de gebruiker in te stellen. Het draait alleen voor login shell. Als u grote veranderingen wilt maken of applicatie-specifieke veranderingen, gebruik dan /etc/profile.d/ directory zoals hier en hier uitgelegd.
Zie de volgende bronnen:

  • Pas de bash shell omgevingen aan van de Linux shell scripting wiki.
  • UNIX Set Environment Variable
File Purpose Voorbeelden (gebruik de cat om een bestand te bekijken)
/etc/environment Instellen van systeem-omgevingsvariabelen in.
PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin"
/etc/profile Linux systeem-wijde .profielbestand voor de Bourne-shell (sh) en Bourne-compatibele shells zoals bash, ksh, ash, en andere.
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/ Alle grote gebruiker- en site-specifieke omgevingsaanpassingen moeten in deze directory worden geplaatst. Dit is ook systeembreed. $ 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 Het persoonlijke initialisatiebestand, uitgevoerd voor login shells.
/usr/bin/keychain /root/.ssh/id_ed25519source /root/.keychain/$HOSTNAME-sh
$HOME~/.bashrc Het individuele per-interactieve-shell opstartbestand.
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 Het individuele login-shell opruimbestand, dat wordt uitgevoerd wanneer een login-shell wordt afgesloten
if ; then && /usr/bin/clear_console -qfi

Samenvattend

Je hebt geleerd hoe je onder Linux omgevingsvariabelen kunt instellen en opnoemen als je bash gebruikt:

Run een programma in een gewijzigde omgeving. Druk alle omgevingsvariabelen af.

Commando Beschrijving Voorbeeld(en)
declare commando Declare bash variabelen en geef ze attributen, zoals integer, geïndexeerde arrays, associatieve arrays, readonly enzovoort Als er geen variabelen of opties worden opgegeven om te declareren, worden de attributen en waarden van alle (variabelen hetzelfde als running set) Zie ‘help declareren’

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
env commando
envenv | moreenv | grep SERVER_ROOT
export commando Commando dat omgevingsvariabelen (GLOBAL) instelt en omgeving exporteert naar een subshell of andere instanties. export NFS_ROOT=/aws/ec2/efs
printenv commando Print alle of een deel (gegeven) van omgevingsvariabelen onder Linux.
printenv SHELLprintenvprintenv | egrep 'SHELL|PS1|PS2'
readonly commando Markeer shellvariabelen als onveranderlijk, d.w.z. alleen-lezen of constante shellvariabele
readonly K_VERSION="1.9.52"
commando Zet of deactiveert waarden van shellopties en positionele parameters. Geeft ook alle omgevingsvariabelen weer. Zie ‘help 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
unset commando Verwijdert shell- en omgevingsvariabelen. Niet alle variabelen kunnen worden gedeactiveerd. Bijvoorbeeld, read-only variabelen kunnen niet worden gedeactiveerd. unset FOO

🐧 Ontvang de nieuwste tutorials over Linux, Open Source & DevOps via RSS feed of wekelijkse email nieuwsbrief.
🐧 23 reacties tot nu toe… voeg er een toe ↓

Categorie Lijst van Unix- en Linux-commando’s
Bestandsbeheer cat
Firewall Alpine Awall – CentOS 8 – OpenSUSE – RHEL 8 – Ubuntu 16.04 – Ubuntu 18.04 – Ubuntu 20.04
Network Utilities dig – host – ip – nmap
OpenVPN CentOS 7 – CentOS 8 – Debian 10 – Debian 8/9 – Ubuntu 18.04 – Ubuntu 20.04
Package Manager apk – apt
Processenbeheer bg – chroot – cron – disown – fg – jobs – killall – kill – pidof – pstree – pwdx – tijd
Onderzoek grep – whereis – welke
Gebruikersinformatie groepen – id – lastcomm – last – lid/libuser-lid – lognaam – leden – gebruikers – whoami – wie – w
WireGuard VPN Alpine – CentOS 8 – Debian 10 – Firewall – Ubuntu 20.04

Laat een antwoord achter

Het e-mailadres wordt niet gepubliceerd. Vereiste velden zijn gemarkeerd met *