it-swarm-eu.dev

Jak vypsat všechny názvy proměnných a jejich aktuální hodnoty?

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.

369
Strapakowsky

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 zshoptionsman page .

504
Lucio

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:

  • spustit terminál
  • zobrazit proměnné prostředí pomocí env nebo printenv nebo čímkoli

Problé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):

  • stiskněte Alt-F2
  • spusťte příkaz 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í:

Example of the bare Shell

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

52
Rmano

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.

51
geirha

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.

12
rɑːdʒɑ

In bash using compgen:

compgen -v | while read line; do echo $line=${!line};done  
8
tmgoblin

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.

3
Ján Lalinský

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"

3
inigo333

printenv uvádí pouze exportované proměnné, command+alt+$ ("\ e $": complete-variable) vypíše všechny proměnné.

0
user1133275