Proměnné prostředí hrají v Linuxu hlavní roli. Většina programů, ať už založených na příkazovém řádku nebo GUI, pracuje s proměnnými prostředí jedním nebo druhým způsobem. Samozřejmě existují nástroje, které vám umožní přístup k proměnným prostředí z příkazového řádku.
Jedním z takových nástrojů je printenv . V tomto tutoriálu probereme příkaz printenv pomocí několika snadno srozumitelných příkladů. Ale než to uděláme, stojí za zmínku, že všechny příklady zde byly testovány na počítači Ubuntu 20.04 LTS.
Linuxový příkaz printenv
Příkaz printenv v Linuxu vám poskytuje možnost zobrazit celé prostředí nebo jeho část. Následuje jeho syntaxe:
printenv [OPTION]... [VARIABLE]...
A zde je návod, jak jej definuje manuálová stránka nástroje:
Print the values of the specified environment VARIABLE(s). If no VARIABLE is specified, print
name and value pairs for them all.
Následuje několik příkladů ve stylu otázek a odpovědí, které by vám měly poskytnout lepší představu o tom, jak příkaz printenv funguje.
Q1. Jak používat printenv?
Základní použití je docela snadné. Jediné, co musíte udělat, je spustit printenv bez jakýchkoli argumentů.
printenv
Následuje výstup vytvořený v mém systému:
CLUTTER_IM_MODULE=xim
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:or=40;31;01:mi=00:su=37;41:sg=30;43:ca=30;41:tw=30;42:ow=34;42:st=37;44:ex=01;32:*.tar=01;31:*.tgz=01;31:*.arc=01;31:*.arj=01;31:*.taz=01;31:*.lha=01;31:*.lz4=01;31:*.lzh=01;31:*.lzma=01;31:*.tlz=01;31:*.txz=01;31:*.tzo=01;31:*.t7z=01;31:*.zip=01;31:*.z=01;31:*.Z=01;31:*.dz=01;31:*.gz=01;31:*.lrz=01;31:*.lz=01;31:*.lzo=01;31:*.xz=01;31:*.zst=01;31:*.tzst=01;31:*.bz2=01;31:*.bz=01;31:*.tbz=01;31:*.tbz2=01;31:*.tz=01;31:*.deb=01;31:*.rpm=01;31:*.jar=01;31:*.war=01;31:*.ear=01;31:*.sar=01;31:*.rar=01;31:*.alz=01;31:*.ace=01;31:*.zoo=01;31:*.cpio=01;31:*.7z=01;31:*.rz=01;31:*.cab=01;31:*.wim=01;31:*.swm=01;31:*.dwm=01;31:*.esd=01;31:*.jpg=01;35:*.jpeg=01;35:*.mjpg=01;35:*.mjpeg=01;35:*.gif=01;35:*.bmp=01;35:*.pbm=01;35:*.pgm=01;35:*.ppm=01;35:*.tga=01;35:*.xbm=01;35:*.xpm=01;35:*.tif=01;35:*.tiff=01;35:*.png=01;35:*.svg=01;35:*.svgz=01;35:*.mng=01;35:*.pcx=01;35:*.mov=01;35:*.mpg=01;35:*.mpeg=01;35:*.m2v=01;35:*.mkv=01;35:*.webm=01;35:*.ogm=01;35:*.mp4=01;35:*.m4v=01;35:*.mp4v=01;35:*.vob=01;35:*.qt=01;35:*.nuv=01;35:*.wmv=01;35:*.asf=01;35:*.rm=01;35:*.rmvb=01;35:*.flc=01;35:*.avi=01;35:*.fli=01;35:*.flv=01;35:*.gl=01;35:*.dl=01;35:*.xcf=01;35:*.xwd=01;35:*.yuv=01;35:*.cgm=01;35:*.emf=01;35:*.ogv=01;35:*.ogx=01;35:*.aac=00;36:*.au=00;36:*.flac=00;36:*.m4a=00;36:*.mid=00;36:*.midi=00;36:*.mka=00;36:*.mp3=00;36:*.mpc=00;36:*.ogg=00;36:*.ra=00;36:*.wav=00;36:*.oga=00;36:*.opus=00;36:*.spx=00;36:*.xspf=00;36:
LESSCLOSE=/usr/bin/lesspipe %s %s
XDG_MENU_PREFIX=gnome-
LANG=en_IN
DISPLAY=:0
GNOME_SHELL_SESSION_MODE=ubuntu
COLORTERM=truecolor
USERNAME=himanshu
XDG_VTNR=2
SSH_AUTH_SOCK=/run/user/1000/keyring/ssh
MANDATORY_PATH=/usr/share/gconf/ubuntu.mandatory.path
XDG_SESSION_ID=2
USER=himanshu
DESKTOP_SESSION=ubuntu
QT4_IM_MODULE=xim
TEXTDOMAINDIR=/usr/share/locale/
GNOME_TERMINAL_SCREEN=/org/gnome/Terminal/screen/44c42800_9a68_408d_8539_7a0e414b7986
DEFAULTS_PATH=/usr/share/gconf/ubuntu.default.path
PWD=/home/himanshu
HOME=/home/himanshu
TEXTDOMAIN=im-config
SSH_AGENT_PID=1918
QT_ACCESSIBILITY=1
XDG_SESSION_TYPE=x11
XDG_DATA_DIRS=/usr/share/ubuntu:/usr/local/share:/usr/share:/var/lib/snapd/desktop
XDG_SESSION_DESKTOP=ubuntu
GJS_DEBUG_OUTPUT=stderr
GTK_MODULES=gail:atk-bridge
WINDOWPATH=2
TERM=xterm-256color
SHELL=/bin/bash
VTE_VERSION=5201
QT_IM_MODULE=xim
[email protected]=ibus
IM_CONFIG_PHASE=2
XDG_CURRENT_DESKTOP=ubuntu:GNOME
GPG_AGENT_INFO=/run/user/1000/gnupg/S.gpg-agent:0:1
GNOME_TERMINAL_SERVICE=:1.61
XDG_SEAT=seat0
SHLVL=1
GDMSESSION=ubuntu
GNOME_DESKTOP_SESSION_ID=this-is-deprecated
LOGNAME=himanshu
DBUS_SESSION_BUS_ADDRESS=unix:path=/run/user/1000/bus
XDG_RUNTIME_DIR=/run/user/1000
XAUTHORITY=/run/user/1000/gdm/Xauthority
XDG_CONFIG_DIRS=/etc/xdg/xdg-ubuntu:/etc/xdg
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin
GJS_DEBUG_TOPICS=JS ERROR;JS LOG
SESSION_MANAGER=local/himanshu:@/tmp/.ICE-unix/1823,unix/himanshu:/tmp/.ICE-unix/1823
LESSOPEN=| /usr/bin/lesspipe %s
GTK_IM_MODULE=ibus
_=/usr/bin/printenv
Takže můžete vidět, že téměř všechny proměnné prostředí nastavené v mém systému byly vytvořeny na výstupu.
Q2. Jak zajistit, aby printenv zobrazoval pouze vybrané informace?
Předpokládejme, že chcete, aby printenv zobrazoval na výstupu podrobnosti týkající se pouze konkrétní proměnné prostředí, pak vše, co musíte udělat, je předat jméno této proměnné jako vstup do příkazu.
Zde je příklad:
printenv SHELL
A zde je výstup vytvořený tímto příkazem:
/bin/bash
Do vstupního seznamu můžete samozřejmě přidat více proměnných. Například následující příkaz:
printenv SHELL HOME
vytvořil výstup zobrazený níže:
/bin/bash
/home/himanshu
3. Jak přimět printenv používat NUL místo nového řádku?
Ve výchozím nastavení používá příkaz printenv nový řádek jako znak ukončení mezi výstupními položkami. Pokud však chcete, můžete nástroj nastavit tak, aby jako terminátor používal NUL.
K tomu budete muset použít volbu --null příkazového řádku. Následuje příklad:
printenv --null SHELL HOME
A zde je snímek obrazovky vytvořeného výstupu v porovnání s použitím printenv bez možnosti --null:
Závěr
Pokud vaše práce na příkazovém řádku Linuxu zahrnuje práci s proměnnými prostředí, příkaz printenv je důležitým nástrojem, který je třeba si zapamatovat. Zde v tomto tutoriálu jsme diskutovali o většině možností, které tento nástroj nabízí. Jakmile si je procvičíte (křivka učení není strmá, takže by to nemělo trvat dlouho), můžete přejít na stránku printenv, kde se dozvíte více o tomto nástroji příkazového řádku.