Reacties
- Deze vraag is geen duplicaat. De gelinkte vraag legt de indeling en betekenis van de DISPLAY env-variabele uit, terwijl deze vraag betrekking heeft op " toewijzing aan een env-variabele en het betrokken programma worden op dezelfde regel geschreven ".
Antwoord
DISPLAY=:0 gnome-panel
is een shell-commando dat het externe commando gnome-panel
uitvoert met de omgevingsvariabele DISPLAY
ingesteld op :0
. De shell-syntaxis VARIABLE=VALUE COMMAND
stelt de omgevingsvariabele VARIABLE
alleen in voor de duur van het opgegeven commando. Het is ongeveer gelijk aan (export VARIABLE=VALUE; exec COMMAND)
.
De omgevingsvariabele DISPLAY
vertelt GUI-programmas hoe ze met de GUI moeten communiceren. Een Unix-systeem kan meerdere X-servers draaien, d.w.z. meerdere beeldschermen. Deze displays kunnen fysieke displays zijn (een of meer monitoren), of externe displays (doorgestuurd via het netwerk, bijv. Via SSH), of virtuele displays zoals Xvfb , etc. De basissyntaxis om displays te specificeren is HOST:NUMBER
; als je het HOST
gedeelte weglaat, is de weergave een lokale.
Displays zijn genummerd vanaf 0, dus :0
is het eerste lokale display dat werd gestart. Bij normale instellingen is dit wat wordt weergegeven op de monitor (en) van de computer.
Net als alle omgevingsvariabelen wordt DISPLAY
overgeërfd van het bovenliggende proces naar het onderliggende Als u zich bijvoorbeeld aanmeldt bij een GUI-sessie, stelt de aanmeldingsmanager of sessie-starter DISPLAY
op de juiste manier in, en de variabele wordt overgenomen door alle programmas in de sessie. Wanneer u opent een SSH-verbinding met X-forwarding, stelt SSH de DISPLAY
omgevingsvariabele in op de doorgestuurde verbinding, zodat de programmas die u op de externe machine uitvoert, worden weergegeven op de lokale machine. Als er geen doorgestuurde X-verbinding (ofwel omdat SSH is geconfigureerd om dit niet te doen, ofwel omdat er geen lokale X-server is), SSH stelt DISPLAY
niet in.
Als u DISPLAY
instelt, wordt het programma expliciet weergegeven op een plaats waar het normaal niet zou zijn. Als u bijvoorbeeld DISPLAY=:0 gnome-panel
in een SSH uitvoert verbindingsster ts een Gnome-paneel op het lokale display van de machine op afstand (ervan uitgaande dat er een is en dat de gebruiker er toegang toe heeft). Het expliciet instellen van DISPLAY=:0
is gewoonlijk een manier om toegang te krijgen tot de lokale weergave van een machine van buiten de lokale sessie, zoals via externe toegang of vanuit een cron-taak.
Answer
Het is een omgevingsvariabele die alleen aan dat programma wordt doorgegeven, in plaats van aan de shell als geheel. Dit gebeurt wanneer je een variabele op dezelfde regel instelt als een commando.
X11-programmas moeten weten waar ze vensters moeten weergeven, aangezien het een client / serversysteem is en je zou kunnen weergeven op een externe machine. Dit betekent simpelweg dat u het eerste scherm op de lokale computer gebruikt.
Dit wordt normaal gesproken automatisch ingesteld wanneer u inlogt op een desktopomgeving. Open bijvoorbeeld een grafische terminal en typ echo $DISPLAY
.
Opmerkingen
- staat de bash-syntaxis toe dat de toewijzing aan een env-variabele en het betrokken programma op dezelfde regel worden geschreven, en gescheiden door witruimte?
- Ja, het ' is precies zoals je in de vraag hebt geciteerd.
- @Tim Alle POSIX-compatibele shells sta dat toe. Het betekent dat je de omgevingsvariabele alleen voor dat ene commando instelt en exporteert, maar dat je de waarde van de shell-variabele (als deze al een waarde heeft) achteraf niet beïnvloedt.
- @MarkPlotnick – it ' is iets meer fijner dan dat. Bij het voorvoegsel van een variabele declaratie voor een willekeurige opdracht behalve een shell-functie of een speciale ingebouwde, zou de declaratie geen invloed moeten hebben op de parent shell ' s definitie voor de specificatie '
zou dus tegelijkertijd de huidige shell-variabele $one
moeten definiëren om dezelfde waarde te hebben als de huidige shell ' s eerste positional terwijl de genoemde positional wordt verwijderd. bash
breekt trouwens standaard met de specificatie.