Vraag Hoe een lijst van alle variabelen namen en hun huidige waarden?


Hoe een lijst van alle variabelen namen en hun huidige waarden?

Inclusief niet alleen $HOME, $PWD enz. maar alle andere die u hebt gedefinieerd.


295
2018-03-30 00:36


oorsprong


superuser.com/questions/420295/... - Ciro Santilli 新疆改造中心 六四事件 法轮功


antwoorden:


Voer de volgende opdracht in een terminal in om alle omgevingsvariabelen af ​​te drukken:

printenv

Lees de. Voor meer informatie over deze opdracht printenv man pagina.


Om een ​​lijst met de "shell-variabelen" weer te geven, kunt u de volgende opdracht invoeren:

( set -o posix ; set ) | less

Dit zal je laten zien niet alleen de shell-variabelen, maar ook de omgevingsvariabelen.

Lees voor meer informatie over dit onderwerp:


417
2018-03-30 01:21



Als ik naar de terminal ga en schrijf MYNEWVARIABLE=Ubuntu en voer uit printenv het laat daar niet zien. Waarom is dat, en hoe komen die anderen tevoorschijn? - Strapakowsky
Waarschijnlijk zie je het verschil tussen een shell-variabele en een omgevingsvariabele. Proberen export MYNEWVARIABLE=Ubuntu en het zal werken zoals je verwacht. - Rmano
als je gewoon uitvoert set, het geeft een lijst van de variabele die door jou is aangemaakt. Of wel set | grep myvar - Sergiy Kolodyazhnyy
printenv is een externe opdracht, dus deze weet alleen geëxporteerde omgevingsvariabelen (en drukt deze af). set is een interne bash-opdracht, dus het toont alle "shell-variabelen" (niet-geëxporteerde omgevingsvariabelen) en de geëxporteerde omgevingsvariabelen. - Dan Pritts
Om het antwoord van @ Rmano op @Strapakowsky uit te breiden ... Dit zal niet werken unset MYNEWVARIABLE; MYNEWVARIABLE=Ubuntu; printenv | grep MYNEW, maar dit zal unset MYNEWVARIABLE; export MYNEWVARIABLE=Ubuntu; printenv | grep MYNEW, en dit zal unset MYNEWVARIABLE; MYNEWVARIABLE=Ubuntu printenv | grep MYNEW. Met export wordt aangegeven dat "de variabele die ik instel, deel moet uitmaken van de omgeving die wordt doorgegeven aan processen, niet alleen een variabele in deze shell." Mijn derde voorbeeld zegt: "de variabele hoort deel te zijn van de omgeving die wordt doorgegeven aan DIT proces, maar er niet achterblijft." - Bruno Bronosky


Ik weet dat deze vraag vrij oud en beantwoord is, maar ik denk dat ik een beetje nuttige informatie kan toevoegen.

In alle hierboven beschreven methoden, is de voorgestelde procedure:

  • een terminal lanceren
  • toon de omgevingsvariabelen met envof printenv of wat dan ook

Het probleem van deze oplossingen is dat je de omgevingsvariabelen ziet van de schaal die tegen de terminal aanloopt. U ziet de omgevingsvariabelen niet beschikbaar voor een toepassingsrun, bijvoorbeeld rechtstreeks door de grafische interface.

Dit is merkbaar als u bijvoorbeeld uw ~/.profileof .bashrcof .zshenv (afhankelijk van je shell) om de omgevingsvariabelen te wijzigen --- zoals de klassieke toevoeging van mappen aan het pad.

Om de omgevingsvariabelen die beschikbaar zijn voor de toepassing direct in de grafische omgeving te starten, kunt u het volgende doen (in Gnome Shell weet ik zeker dat er een equivalente methode is in alle andere DE):

  • druk op Alt-F2
  • voer het commando uit xterm -e bash --noprofile --norc

U hebt nu een terminal met een shell die geen omgevingsvariabelen heeft toegevoegd. Je kunt gebruiken env hier om al uw omgevingsvariabelen op te sommen:

Example of the bare shell

Het is duidelijk dat de nieuwe shell de omgevingsvariabelen zal laten toevoegen door de systeembestanden, maar dat variabelen toch beschikbaar moeten zijn (door overerving) voor alle programma's in het systeem.

Ik post dit omdat het de vierde keer is dat ik deze truc opnieuw moet doorzoeken, mijn controle .pam_environment het dossier. Dus nu zal ik het sneller vinden (en in dit proces hoop ik iemand anders te helpen ...)


43
2017-10-12 00:37



Vereist dat u een desktopomgeving hebt, niet nuttig voor alleen CLI-gebruikers. - K7AAY
Ja --- maar voor CLI is alleen het vorige antwoord in orde. Ik heb er alleen op gewezen dat je ooit omgevingsvariabelen moet controleren die beschikbaar zijn voor de toepassing die wordt gestart door de grafische omgeving, wat niet dezelfde set is die je ziet wanneer je een terminal erin start. Als u bijvoorbeeld probeert te begrijpen waarom uw Kile-app een LaTeX-bestand niet kan compileren, terwijl u in een terminal bent, dan zal de truc die ik hier heb gepost veel helpen. - Rmano
Bedankt voor een zeer nuttig antwoord! Ik heb er net een link van gemaakt help.ubuntu.com/community/... - Gunnar Hjalmarsson
Bedankt. Heb je aanbevolen? xterm -e bash --noprofile --norc omdat de opstartbestanden niet worden gelezen en uitgevoerd wanneer Ubuntu wordt gestart met een grafische interface? Zien askubuntu.com/q/1025845/1471 - Tim
@Tim eigenlijk is het gewoon een manier om een ​​shell te hebben zonder iets anders dan de omgevingsvariabelen die beschikbaar zijn voor de grafische omgeving. Een standaardterminal zal lezen (of herlezen) .bashrc bijvoorbeeld... - Rmano


Je kunt alle variabelen zien met de declare ingebouwde.

declare -p

Als u alleen geïnteresseerd bent in omgevingsvariabelen, gebruikt u

declare -xp

Rennen help declare om te zien wat de andere opties zijn.


32
2018-04-04 20:28



dit is een veel leukere oplossing dan POSIXLY_CORRECT=1 set en het is ook vermeldenswaard dat declare is alias (in die context) voor typeset, nog een bash ingebouwd. - w17t


Om de omgevingsvariabelen weer te geven in terminal met CTRL+ALT+T je kunt gebruiken env opdracht.

bijvoorbeeld :

[raja@localhost ~]$ 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

enz.

hoop dat het helpt.


11
2018-03-30 16:41



Ik heb gemerkt dat env enkele variabelen mist o_O. specifiek na het sourcen van een VAR = VAL-bestand. - ThorSummoner
@ThorSummoner Het antwoord hier zou kunnen helpen stackoverflow.com/questions/15474650/... - georaldc


In bash met behulp van compgen:

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

3
2018-04-11 20:53



Dit zou het geaccepteerde antwoord moeten zijn, want alle anderen vermelden meer dan alleen de naam zelf. In mijn geval bevatten sommige variabelen waarden van meerdere regels waardoor de andere oplossingen niet haalbaar zijn. - Mene


env is een POSIX 7 manier:

export asdf=qwer
env | grep asdf

Voorbeelduitvoer:

asdf=qwer

Het toont alleen geëxporteerde variabelen: niet-geëxporteerde variabelen worden meestal niet beschouwd als "omgevingsvariabelen".

Liever dat over printenv, wat niet POSIX is. Beide lijken hetzelfde te doen zonder argumenten: https://unix.stackexchange.com/questions/123473/what-is-the-difference-between-env-and-printenv


2
2017-11-30 14:31



Al twee jaar geleden genoemd: askubuntu.com/a/276162/158442 - muru
@muru eerlijk genoeg. Ik wou dat het gemaakt was env beter zichtbaar met betere opmaak en ik heb meer informatie toegevoegd. - Ciro Santilli 新疆改造中心 六四事件 法轮功
Dat is wat editing is voor. - muru


Als u een specifieke omgevingsvariabele wilt, in plaats van ze allemaal af te drukken printenv, je kunt het bijvoorbeeld afdrukken door het te doen echo "$PWD"


0
2018-01-08 14:13