Kommentarer
- Denna fråga är inte en duplikat. Den länkade frågan förklarar formatet och betydelsen av DISPLAY env-variabeln medan denna fråga frågar om " tilldelning till en env-variabel och det drabbade programmet skrivs på samma rad ".
Svar
DISPLAY=:0 gnome-panel
är ett skalkommando som kör det externa kommandot gnome-panel
med miljövariabeln DISPLAY
inställt på :0
. Skalsyntaxen VARIABLE=VALUE COMMAND
anger endast miljövariabeln VARIABLE
under det angivna kommandot. Det motsvarar ungefär (export VARIABLE=VALUE; exec COMMAND)
.
Miljövariabeln DISPLAY
berättar för GUI-program hur man kommunicerar med GUI. Ett Unix-system kan köra flera X-servrar , dvs. flera visningar. Dessa skärmar kan vara fysiska skärmar (en eller flera skärmar), eller fjärrskärmar (vidarebefordras över nätverket, t.ex. över SSH), eller virtuella skärmar som Xvfb , etc. Den grundläggande syntaxen för att specificera skärmar är HOST:NUMBER
; om du utelämnar HOST
-delen är skärmen lokal.
Skärmarna är numrerade från 0, så :0
är den första lokala skärmen som startades. På typiska inställningar är det här som visas på datorns skärm.
Som alla miljövariabler ärvs DISPLAY
från föräldraprocess till barn Till exempel när du loggar in på en GUI-session ställer inloggningshanteraren eller sessionstarteren DISPLAY
på lämpligt sätt och variabeln ärvs av alla program i sessionen. När du öppnar en SSH-anslutning med X-vidarebefordran, sätter SSH miljövariabeln DISPLAY
till den vidarebefordrade anslutningen, så att de program som du kör på fjärrmaskinen visas på den lokala maskinen. ingen vidarebefordrad X-anslutning (antingen för att SSH är konfigurerad att inte göra det, eller för att det inte finns någon lokal X-server), SSH anger inte DISPLAY
.
Om du ställer in DISPLAY
visas programmet uttryckligen på en plats där det normalt inte skulle vara. Om du t.ex. kör DISPLAY=:0 gnome-panel
i en SSH anslutningsstjärna ts en Gnome-panel på fjärrmaskinens lokala skärm (förutsatt att det finns en och att användaren har behörighet att komma åt den). Att uttryckligen ställa in DISPLAY=:0
är vanligtvis ett sätt att komma åt en maskins lokala skärm utanför den lokala sessionen, till exempel via fjärråtkomst eller från ett cron-jobb.
Svar
Det är en miljövariabel som skickas bara till det programmet snarare än skalet som helhet. Detta händer när du ställer in en variabel på samma rad som ett kommando.
X11-program behöver veta var de ska visa fönster, eftersom det är ett klient- / serversystem och du kan visa på en fjärrmaskin. Detta betyder helt enkelt att du använder den första skärmen på den lokala maskinen.
Detta ställs normalt in automatiskt när du loggar in på en skrivbordsmiljö. Öppna till exempel en grafisk terminal och skriv echo $DISPLAY
.
Kommentarer
- tillåter bash-syntax tilldelningen till en env-variabel och det berörda programmet skrivs på samma rad, och åtskilda av vitt utrymme?
- Ja, det ' är precis som du citerade i frågan.
- @Tim Alla POSIX-kompatibla skal Det betyder att ställa in och exportera miljövariabeln bara för det ena kommandot, men inte att påverka värdet på skalvariabeln (om den redan har ett värde) efteråt.
- @MarkPlotnick – det ' lite mer finare än det. När en variabeldeklaration inför ett kommando förutom en skalfunktion eller en speciell inbyggd prefix ska deklarationen inte påverka det överordnade skalet ' definition för specifikationen ' d var, men när det görs för någon av dessa POSIX anger att variabeldeklarationen ska hålla fast. Så POSIXLY bör
one=$1 shift
samtidigt definiera den aktuella skalvariabeln$one
för att värdera samma som det aktuella skalet ' första position medan du tar bort positionen.bash
bryter förresten med specifikationen som standard. - @mikeserv Tack som alltid för en mer exakt och korrekt beskrivning.