A kérdésre már itt van válasz :

Megjegyzések

  • Ez a kérdés nem másolat. A kapcsolt kérdés elmagyarázza a DISPLAY env változó formátumát és jelentését, míg ez a kérdés a " hozzárendelésre vonatkozik. egy env változót és az érintett programot ugyanabba a sorba kell írni ".

Válasz

DISPLAY=:0 gnome-panel egy shell parancs, amely a gnome-panel külső parancsot futtatja a beállítása :0. A héj szintaxisa VARIABLE=VALUE COMMAND az VARIABLE környezeti változót csak a megadott parancs időtartamára állítja be. Nagyjából ekvivalens az (export VARIABLE=VALUE; exec COMMAND) kifejezéssel.

Az DISPLAY környezeti változó megmondja a GUI programoknak, hogyan kell kommunikálni a GUI-val. Egy Unix rendszer futtathat több X szervert , azaz többszörös megjelenítést. Ezek a kijelzők lehetnek fizikai kijelzők (egy vagy több monitor), vagy távoli kijelzők (továbbítva a hálózaton, pl. SSH-n keresztül), vagy virtuális kijelzők, például Xvfb , stb. A kijelzők megadásának alapvető szintaxisa a HOST:NUMBER; ha kihagyja a HOST részt, a megjelenítés helyi.

A kijelzők 0-tól vannak számozva, tehát :0 az első helyi kijelző, amely elindult. A tipikus beállításoknál ez jelenik meg a számítógép monitorán.

Mint minden környezeti változó, az DISPLAY is a szülői folyamatoktól öröklődik. Ha például belép egy GUI munkamenetbe, a bejelentkezéskezelő vagy a munkamenet indítója megfelelően beállítja az DISPLAY elemet, és a változót a munkamenet összes programja örökli. X továbbítással rendelkező SSH kapcsolat, az SSH a DISPLAY környezeti változót az átirányított kapcsolatra állítja, így a távoli gépen futtatott programok megjelennek a helyi gépen. nincs továbbított X kapcsolat (vagy azért, mert az SSH úgy van konfigurálva, hogy ne csinálja, vagy azért, mert nincs helyi X szerver), az SSH nem állítja be a DISPLAY elemet.

Az DISPLAY beállítás kifejezetten azt eredményezi, hogy a program egy olyan helyen jelenik meg, ahol általában nem lenne. Például a DISPLAY=:0 gnome-panel futtatása SSH-ban kapcsolat csillag tegyen egy távoli gép helyi kijelzőjén egy Gnome panelt (feltételezve, hogy van ilyen és a felhasználó jogosult hozzáférni hozzá). A DISPLAY=:0 kifejezett beállítása általában a gép helyi megjelenítésének elérési módja a helyi munkameneten kívülről, például távoli hozzáférésből vagy cron jobból.

Válasz

Ez egy olyan környezeti változó, amelyet csak az adott program továbbít, nem pedig a shell egésze. Ez akkor történik, ha egy változót ugyanazon a soron állít be, mint egy parancs.

Az X11 programoknak tudniuk kell, hogy hol jelenítsék meg az ablakokat, mivel ez kliens / szerver rendszer, és Ön távoli gépen jeleníthet meg. Ez egyszerűen azt jelenti, hogy az első kijelzőt a helyi gépen kell használni.

Ezt általában automatikusan beállítják, amikor bejelentkezik egy asztali környezetbe. Például nyisson meg egy grafikus terminált, és írja be a következőt: echo $DISPLAY.

Megjegyzések

  • a bash szintaxis lehetővé teszi a hozzárendelést egy env változóhoz, és az érintett program ugyanarra a sorra íródik, és szóköz választja el egymástól?
  • Igen, ' pontosan olyan, mint amit a kérdésben idézett.
  • @Tim Minden POSIX-kompatibilis héj Ez azt jelenti, hogy a környezeti változót csak az adott parancshoz állítja be és exportálja, de nem befolyásolja utólag a shell változó értékét (ha már van értéke).
  • @MarkPlotnick – it ' sa kicsit több finomabb szemcsésségű ennél. Amikor egy változó deklarációt bármely parancshoz előhív, de egy shell függvényt vagy egy speciális beépítettet, a deklarációnak nem szabad befolyásolnia a szülőhéj ' specifikációját a spec ' d var, de amikor ezt a POSIX bármelyikét megcsinálja, kijelenti, hogy a változó deklarációnak ragaszkodnia kell. Tehát, POSIXLY, one=$1 shift -nek egyidejűleg meg kell határoznia az aktuális $one héjváltozót, hogy ugyanaz legyen az értéke, mint az aktuális héj ' első helyzetét, miközben eltávolítja az említett helyzetet. A bash egyébként alapértelmezés szerint megtöri a specifikációt.
  • @mikeserv Köszönöm, mint mindig a pontosabb és helyesebb leírást.

Vélemény, hozzászólás?

Az email címet nem tesszük közzé. A kötelező mezőket * karakterrel jelöltük