Ich habe dieses Programm, das mit einer Textbenutzeroberfläche und einer grafischen Benutzeroberfläche ausgeführt werden kann.
Es fehlt ein Befehlszeilenschalter, um den einen oder anderen zu erzwingen. Ich schätze, er erkennt irgendwie automatisch, ob wir uns in X befinden oder nicht (z. B. wenn ich ihn von einem virtuellen Terminal aus starte, wechselt er in den Textmodus, und wenn ich ihn von dort aus starte Ein X-Terminal-Emulator öffnet ein separates Grafikfenster.
Ich möchte es in den Textmodus zwingen und es im X-Terminal ausführen lassen. Wie würde ich das machen?
DISPLAY=:0
wenn sie nicht eingestellt ist. Ich glaube, Sie können das beheben, indem Sie es unter einem anderen Benutzer ausführen und iptables verwenden, um Loopback X11 zu löschen, aber das ist ziemlich grob.DISPLAY=invalid:0
?env
anstelle einer Unterschale ausführen:env -u DISPLAY emacs foo.c
emacs
verfügt über ein Befehlszeilen-Flag, mit dem die Verwendung von X deaktiviert werden kann. Geben Sie einfach Folgendes einemacs -nw
. Aber wenn nicht, könnten Sie stattdessen verwendenDISPLAY= emacs
, was auch funktioniert.DISPLAY=0.0.0.0:0
schlägt sofort fehl, ohne einen Nameserver-Lookup durchzuführen.Wenn Sie X für einen einzelnen Befehl deaktivieren möchten, können Sie schreiben
Beachten Sie die strategische Leerstelle nach
=
. Im Allgemeinen können Sie Umgebungsvariablen für einen Prozess festlegen, indem Sie Ihrem Befehl eine<variable>=<value>
durch Leerzeichen getrennte Folge voranstellen. Da das Leerzeichen als Trennzeichen dient, wird=
die vorhergehende Variable durch ein unmittelbares Leerzeichen gelöscht. Wir können die Auswirkung dieser Präfixe untersuchen, indem wir eine Subshell als Befehl verwenden und dann ihre Umgebung drucken. Nimm zum Beispiel:Dies wird gedruckt
Dies zeigt, dass die Umgebung der Unterschale tatsächlich anders ist als beabsichtigt. Beachten Sie, dass die Shell-Ersetzung erfolgt, bevor die einzelnen Argumente übergeben werden
echo
, sodass zwischenb
undd
in der Ausgabe nur ein einziges Leerzeichen vorhanden ist , genau wie in der Befehlszeileecho a b d
(mit zwei Leerzeichen).quelle