Jak vypsat všechny názvy proměnných a jejich aktuální hodnoty?
Včetně nejen $HOME
, $PWD
atd., ale jakékoli jiné, které jste definovali.
Pro bash: (standardní Shell v Ubuntu)
Chcete-li vytisknout všechny proměnné prostředí, zadejte do terminálu následující příkaz:
printenv
Další informace o tomto příkazu naleznete na stránce printenv
man .
Chcete-li zobrazit seznam obsahující "proměnné prostředí", můžete zadat následující příkaz:
( set -o posix ; set ) | less
Toto vám ukáže nejen proměnné prostředí, ale také proměnné prostředí.
Pro více informací o tomto tématu čtěte:
Pro zsh: (pokročilé prostředí)
Použijte následující příkaz:
( setopt posixbuiltin; set; ) | less
Další informace o možnostech ZSH naleznete na stránce zshoptions
man page .
Vím, že tato otázka je dost stará a zodpovězená, ale myslím, že mohu přidat trochu užitečných informací.
Ve všech výše popsaných metodách je navržen postup:
env
nebo printenv
nebo čímkoliProblém těchto řešení je v tom, že vidíte proměnné prostředí prostředí, které běží do terminál. Nevidíte proměnné prostředí dostupné pro běh aplikace, například přímo prostřednictvím grafického rozhraní.
To je patrné, pokud například používáte ~/.profile
Nebo .bashrc
Nebo .zshenv
(V závislosti na vašem prostředí), abyste změnili proměnné prostředí --- jako klasické přidání adresářů na cestu.
Chcete-li vidět proměnné prostředí dostupné pro aplikaci spuštěnou přímo v grafickém prostředí, můžete udělat následující (v Gnome Shell, jsem si jist, že existuje ekvivalentní metoda ve všech ostatních DE):
xterm -e bash --noprofile --norc
(Nebo pokud nemáte xterm
, gnome-terminal -- bash --noprofile --norc
--- díky @ Mike Nakis za komentář).
Nyní máte terminál s prostředí, které nepřidalo žádné proměnné prostředí. Zde můžete použít env
pro výpis všech proměnných prostředí:
Je zřejmé, že nový Shell bude mít systémové proměnné přidány proměnné prostředí, ale tyto proměnné by měly být dostupné (dědičností) všem programům v systému.
Zveřejňuji to, protože je to počtvrté, kdy musím tento trik znovu prohledat a zkontrolovat svůj soubor .pam_environment
. Takže teď to najdu rychleji (a v tomto procesu doufám, že pomůžu někomu jinému ...)
Všechny proměnné můžete vidět pomocí zabudovaného declare
.
declare -p
Pokud vás zajímají pouze proměnné prostředí, použijte
declare -xp
Spustit help declare
a uvidíte, jaké jsou další možnosti.
Seznam proměnných prostředí v terminálu pomocí CTRL+ALT+T můžete použít příkaz env
.
například :
[[email protected] ~]$ env
XDG_VTNR=1
SSH_AGENT_PID=3671
XDG_SESSION_ID=3
HOSTNAME=localhost.localdomain
IMSETTINGS_INTEGRATE_DESKTOP=yes
GPG_AGENT_INFO=/home/raja/.gnupg/S.gpg-agent:3691:1
GLADE_PIXMAP_PATH=:
TERM=xterm-256color
Shell=/bin/bash
XDG_MENU_PREFIX=xfce-
DESKTOP_STARTUP_ID=
HISTSIZE=1000
XDG_SESSION_COOKIE=0250277dd805498381e96c05d88068b0-1364679772.845276-1676152201
WINDOWID=65011716
GNOME_KEYRING_CONTROL=/home/raja/.cache/keyring-N3QoQ2
IMSETTINGS_MODULE=none
QT_GRAPHICSSYSTEM_CHECKED=1
USER=raja
atd.
doufám, že to pomůže.
In bash using compgen:
compgen -v | while read line; do echo $line=${!line};done
env je POSIX 7 way :
export asdf=qwer
env | grep asdf
Ukázkový výstup:
asdf=qwer
Ukazuje pouze exportované proměnné: nevyvážené proměnné se obvykle nepovažují za „proměnné prostředí“.
Upřednostňujte to před printenv
, což není POSIX. Zdá se, že oba dělají totéž bez argumentů: https://unix.stackexchange.com/questions/123473/what-is-the-difference-between-env-and-printenv
Většina řešení zde buď tiskne pouze proměnné prostředí, nebo má tu nevýhodu, že env nebo (set -o posix; posix) netiskne hodnoty ve tvaru parsable (zkuste tisknout proměnnou A = $ 'a\r\nb' ...) .
Zde je funkce, která bude tisknout všechny proměnné, jednu proměnnou na řádek, ve formě s únikem POSIX:
function dump_vars {
local VARNAME
compgen -v | while read -r VARNAME; do
printf "$VARNAME=%q\n" "${!VARNAME}"
done
}
Děkuji @tmgoblin za zdůraznění použití compgen -v.
Pokud chcete konkrétní proměnnou prostředí, namísto tisku všech pomocí printenv
, můžete ji například vytisknout provedením echo "$PWD"
printenv uvádí pouze exportované proměnné, command+alt+$ ("\ e $": complete-variable) vypíše všechny proměnné.