Articles

Linux Setze Umgebungsvariable Befehl Tutorial

Die Bash-Shell wird unter Linux für verschiedene Zwecke verwendet. Wie kann ich die Shell-Umgebungsvariable unter Linux-Betriebssystemen anpassen? Wie kann ich die Umgebungsvariable unter Linux setzen und anzeigen?
Sie können Shell-Variablen verwenden, um Daten zu speichern, Konfigurationsoptionen zu setzen und die Shell-Umgebung unter Linux anzupassen. Die Standard-Shell unter Linux ist Bash und kann für folgende Zwecke verwendet werden:

  1. Konfigurieren Sie das Aussehen der Shell.
  2. Konfigurieren Sie die Terminaleinstellungen, je nachdem, welches Terminal Sie verwenden.
  3. Suchpfad einstellen, z. B. JAVA_HOME und ORACLE_HOME.
  4. Umgebungsvariablen anlegen, wie sie von Programmen benötigt werden.
  5. Befehle ausführen, die bei jeder An- und Abmeldung ausgeführt werden sollen.
  6. Aliase und/oder Shell-Funktionen einrichten, um Aufgaben zu automatisieren und so Tipparbeit und Zeit zu sparen.
  7. Bash-Prompt ändern.
  8. Shell-Optionen einstellen.

Zwei Arten von Shell-Variablen

  • Umgebungsvariablen (GLOBAL): Normalerweise sollten Endanwender nicht mit Umgebungsvariablen herumspielen, da sie systemweit verfügbar sind und Subshells und Kindprozesse auf sie zugreifen können. In bestimmten Szenarien können wir sie nach unseren Bedürfnissen modifizieren. Zum Beispiel richten wir einen systemweiten Pfad für die JAVA-App oder PATH für die Suche nach Binärdateien ein. In fast allen Fällen verwenden wir den Befehl export, um Umgebungsvariablen zu definieren oder zu ändern.
  • Shell- und benutzerdefinierte Variablen (LOCAL) : Wie der Name schon sagt, werden diese vom Benutzer definiert und gelten aktuell für die aktuelle Shell-Sitzung.

Sie können die folgenden Befehle verwenden, um die Umgebung anzuzeigen und zu konfigurieren.

Aktuelle Umgebungsvariablen unter Linux anzeigen

Der Befehl printenv zeigt alle oder die angegebenen Umgebungsvariablen an. Öffnen Sie die Terminal-Eingabeaufforderung und geben Sie dann ein:
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-Befehl

Der env-Befehl führt einen Linux-Befehl mit einer modifizierten Umgebung aus. Die Syntax lautet:

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

Bitte beachten Sie, dass die resultierende Umgebung auf dem Bildschirm angezeigt wird, wenn nach den Umgebungsangaben kein Befehlsname angegeben wird. Dies ist vergleichbar mit der Angabe des Befehls printenv, wie zuvor beschrieben. Beispiel:

envenv | moreenv | grep 'PS1'

Mit dem set-Befehl Umgebungsvariablen in Linux setzen und auflisten

Der env-Befehl/printenv-Befehl zeigt nur die Umgebungsvariablen der Linux-Shell an. Was aber, wenn Sie eine Liste aller Variablen, einschließlich Shell-, Umgebungs- und benutzerdefinierten Shell-Funktionen, sehen wollen? Versuchen Sie den folgenden set-Befehl, um Umgebungsvariablen auszugeben:
set
set | grep BASH

Hier sehen wir, was wir sehen:

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

Der $PATH definiert den Suchpfad für Befehle. Es ist eine durch Doppelpunkte getrennte Liste von Verzeichnissen, in denen die Shell nach Befehlen sucht. Das $PS1 definiert Ihre Prompt-Einstellungen, siehe die Liste aller häufig verwendeten Shell-Variablen. Sie können den Wert einer Variablen mit dem printf-Befehl oder dem echo-Befehl anzeigen:

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

Die Ausgabe des letzten Befehls zeigt den Speicherort meines Heimatverzeichnisses an, der unter Linux durch die Umgebungsvariable $HOME festgelegt wird:
/home/vivek

Umgebungsvariablen auf Linux-Befehl setzen

Die Syntax ist ziemlich einfach:

# 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

Ein paar wichtige Punkte, die man sich merken sollte, wenn man Umgebungsvariablen unter Linux mit der Bash erstellt oder einrichtet:

  1. Keine Leerzeichen um das =-Symbol setzen.
  2. Wie bei Linux-Befehlen wird auch bei den Namen der Bash-Variablen zwischen Groß- und Kleinschreibung unterschieden. Normalerweise definieren wir Umgebungsvariablen nur in Namen in GROSSBUCHSTABEN, was als beste Praxis gilt, aber nicht erforderlich ist.
  3. Der Geltungsbereich von Linux-Variablen ist standardmäßig LOCAL. Wir können sie mit dem Befehl export zu GLOBAL (oder Umgebungsvariablen) machen.

Lassen Sie uns die Werte unserer VAR_NUM, VAR_NUM, MY_OS und anderer Variablen ausgeben, die wir zuvor mit verschiedenen Befehlen definiert haben:

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

Shell-Variable und Werte aufheben / entfernen

Wir können Werte und Attribute von Shell-Variablen und -Funktionen mit dem unset-Befehl aufheben:

unset var_nameunset MY_OSunset is_backup_failed

Wie man unter Linux mit bash schreibgeschützte Umgebungsvariablen setzt

Wir verwenden den Befehl readonly wie folgt:

readonly var=valuereadonly PI=3.14export PI # Make it enviorment/global var echo "$PI"PI=4.2bash -c "echo $PI"unset PI
Bash einrichten read only varible Linux-Befehl

Einrichten von unveränderbaren read-einzige Bash-Variable auf meinem Ubuntu-Linux-Desktop

Zugriff auf benutzerdefinierte Variablen in Sub-Shells und anderen Instanzen

Starten wir eine neue Instanz der Bash, eingeben und versuchen, Werte wie folgt auszugeben:

# 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

Setzen und Auflisten von Umgebungsvariablen unter Linux

Setzen und Auflisten von Umgebungsvariablen LOCAL unter Linux

In Schritt # 4, ist die Ausgabe leer. Aber warum? Das bedeutet, dass die Variablen, die wir definiert haben, keine Umgebungsvariablen sind, sondern LOCAL. In einer Sub-Shell und anderen neuen Shell-Instanzen werden die Variablenwerte nicht exportiert. Daher verwenden wir den Befehl export, um sie zu GLOBAL- oder Umgebungsvariablen zu machen. Zum Beispiel:

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"
Wie man Umgebungsvariablen in Linux setzt

Setzen von Umgebungsvariablen (GLOBAL) in Linux mit export für die aktuelle und exportierte Bash-Sitzung des Benutzers

Befehl export

Mit dem Befehl export können Sie jede Umgebungs- oder Systemvariable ändern. Setzen Sie die Umgebungsvariable PATH so, dass sie das Verzeichnis enthält, in dem Sie das bin-Verzeichnis mit Perl- und Shell-Skripten installiert haben:

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

OR

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

Um die Umgebungsvariable JAVA_HOME auf das Verzeichnis zu setzen, in dem Sie die J2SE-SDK-Anwendung installiert haben, eingeben:

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

Sie können mehrere Pfade wie folgt setzen:

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

Ein Hinweis zu env und das Einrichten von Variablen

Zunächst setzen Sie die Variable NFS_ROOT auf /efs/ec2/wwwdata und führen das Perl-Skript check_for_files.pl
env NFS_ROOT=/efs/ec2/wwwdata check_for_files.pl
In diesem Beispiel führen Sie ‚vim‘ mit der Umgebung aus, die ‚LOGNAME=nixcraft‘,und ‚DISPLAY=desktop2:0‘ enthält:
env - DISPLAY=desktop2:0 LOGNAME=nixcraft vim /path/to/file
Setzen Sie FOO auf bar und geben Sie es mit perl aus:
env - FOO=bar /usr/bin/perl -e 'print "$FOO \n"'
Wir können $FOO von der Shell aus nicht sehen, da es nur für Perl-Code definiert wurde:
echo "$FOO"

Wie mache ich alle Umgebungsvariablen-Einstellungen unter Linux permanent/persistent?

Die Datei ~/.bash_profile ($HOME/.bash_profile) oder ~/.profile wird ausgeführt, wenn Sie sich über die Konsole oder per Fernzugriff über ssh anmelden. Geben Sie den folgenden Befehl ein, um die Datei ~/.bash_profile zu bearbeiten, geben Sie ein:
$ vi ~/.bash_profile
Fügen Sie die $PATH-Einstellungen ein, geben Sie ein:
export PATH=${PATH}:${HOME}/bin
Speichern Sie die Datei und schließen Sie sie.

Set IBM DB2 Instance Name

Geben Sie den folgenden Befehl ein:

export DB2INSTANCE=prod_sales

Ein Hinweis zur Datei /etc/profile

/etc/profile oder /etc/profile.d/ Verzeichnis enthält die systemweite Linux-Umgebung und Startprogramme. Es wird von allen Benutzern mit der bash-, ksh- und sh-Shell verwendet. Normalerweise wird es verwendet, um die PATH-Variable, Benutzergrenzen und andere Einstellungen für Benutzer zu setzen. Sie läuft nur für die Login-Shell. Wenn Sie größere Änderungen oder anwendungsspezifische Änderungen vornehmen möchten, verwenden Sie das Verzeichnis /etc/profile.d/, wie hier und hier erklärt.
Sehen Sie sich die folgenden Ressourcen an:

  • Anpassen der Bash-Shell-Umgebungen aus dem Linux-Shell-Skripting-Wiki.
  • UNIX-Umgebungsvariable setzen
File Zweck Beispiele (verwenden Sie cat, um eine Datei anzuzeigen)
/etc/environment Setzen Sie system-breite Umgebungsvariablen.
PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin"
/etc/profile Linux-Systemweite .Profildatei für die Bourne-Shell (sh) und Bourne-kompatible Shells wie bash, ksh, ash und 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 großen benutzer- und standortspezifischen Umgebungsanpassungen sollten in diesem Verzeichnis abgelegt werden. Dies gilt auch systemweit. $ 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 Die persönliche Initialisierungsdatei, die bei Anmelde-Shells ausgeführt wird.
/usr/bin/keychain /root/.ssh/id_ed25519source /root/.keychain/$HOSTNAME-sh
$HOME~/.bashrc Die individuelle Startdatei pro interaktiver Shell.
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 Die individuelle Aufräumdatei der Login-Shell, wird ausgeführt, wenn eine Login-Shell beendet wird
if ; then && /usr/bin/clear_console -qfi

Zusammenfassung

Sie haben gelernt, wie Sie unter Linux mit der Bash Umgebungsvariablen setzen und auflisten können:

readonly-Befehl

Set-Befehl

Befehl Beschreibung Beispiel(e)
Befehl deklarieren Bash-Variablen deklarieren und ihnen Attribute wie integer, indizierte Arrays, assoziative Arrays, readonly und so weiter Wenn keine Variablen oder Optionen zum Deklarieren angegeben werden, werden die Attribute und Werte aller (Variablen wie im laufenden Betrieb) Siehe ‚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
env-Befehl Ein Programm in einer veränderten Umgebung ausführen. Geben Sie alle Umgebungsvariablen aus.
envenv | moreenv | grep SERVER_ROOT
Exportbefehl Befehl, der Umgebungsvariablen (GLOBAL) setzt und die Umgebung in eine SubShell oder andere Instanzen überträgt. export NFS_ROOT=/aws/ec2/efs
printenv-Befehl Drucke alle oder einen Teil (gegeben) der Umgebungsvariablen unter Linux.
printenv SHELLprintenvprintenv | egrep 'SHELL|PS1|PS2'
Shell-Variablen als unveränderbar markieren, d.h. schreibgeschützte oder konstante Shell-Variable
readonly K_VERSION="1.9.52"
Setzen oder Aufheben von Werten von Shell-Optionen und Positionsparametern. Zeigt außerdem alle Umgebungsvariablen an. Siehe ‚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
Befehl „unset“ Löscht Shell- und Umgebungsvariablen. Nicht alle Variablen können zurückgesetzt werden. Zum Beispiel können schreibgeschützte Variablen nicht zurückgesetzt werden. unset FOO

🐧 Holen Sie sich die neuesten Tutorials zu Linux, Open Source & DevOps per RSS-Feed oder wöchentlichem E-Mail-Newsletter.
🐧 Bisher 23 Kommentare… einen hinzufügen ↓

Kategorie Liste der Unix- und Linux-Befehle
Dateiverwaltung cat
Firewall Alpine Awall – CentOS 8 – OpenSUSE – RHEL 8 – Ubuntu 16.04 – Ubuntu 18.04 – Ubuntu 20.04
Netzwerkdienstprogramme dig – host – ip – nmap
OpenVPN CentOS 7 – CentOS 8 – Debian 10 – Debian 8/9 – Ubuntu 18.04 – Ubuntu 20.04
Package Manager apk – apt
Prozessverwaltung bg – chroot – cron – disown – fg – jobs – killall – kill – pidof – pstree – pwdx – time
Suchen grep – whereis – which
Benutzerinformationen groups – id – lastcomm – last – lid/libuser-lid – logname – members – users – whoami – who – w
WireGuard VPN Alpine – CentOS 8 – Debian 10 – Firewall – Ubuntu 20.04

Eine Antwort schreiben

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.