Mam ten program, który może działać zarówno z tekstowym interfejsem użytkownika, jak i graficznym interfejsem użytkownika.
Brakuje przełącznika wiersza poleceń, aby wymusić jedno lub drugie, raczej wydaje mi się, że w jakiś sposób automatycznie wykrywa, czy jesteśmy w X, czy nie (np. Jeśli uruchomię go z wirtualnego terminalu, wejdzie w tryb tekstowy, a jeśli uruchomię go z emulator terminala X otwiera osobne okno graficzne).
Chciałbym zmusić go do przejścia w tryb tekstowy i uruchomić w terminalu X. Jak miałbym to zrobić?
DISPLAY=:0
, że są wyłączone. Wierzę, że możesz to naprawić, uruchamiając go pod innym użytkownikiem i używając iptables do upuszczenia sprzężenia zwrotnego X11, ale to dość obrzydliwe.DISPLAY=invalid:0
?env
zamiast podpowłoki:env -u DISPLAY emacs foo.c
emacs
ma flagę wiersza poleceń, aby wyłączyć użycie X. Wystarczy wpisaćemacs -nw
. Ale jeśli nie, możesz zamiast tego użyćDISPLAY= emacs
, co również działa.DISPLAY=0.0.0.0:0
kończy się niepowodzeniem natychmiast bez wyszukiwania serwera nazw.Jeśli chcesz wyłączyć X dla pojedynczego polecenia, możesz napisać
Zwróć uwagę na strategiczne puste miejsce po
=
. Mówiąc bardziej ogólnie, można ustawić zmienne środowiskowe dla procesu, poprzedzając polecenie sekwencją<variable>=<value>
oddzieloną spacjami. Ponieważ spacja służy jako separator,=
bezpośrednio po niej spacja usuwa poprzednią zmienną. Możemy spojrzeć na efekt tych prefiksów, używając podpowłoki jako polecenia, a następnie drukując jej środowisko. Weź na przykład:To zostanie wydrukowane
To pokazuje, że środowisko podpowłoki rzeczywiście różni się od zamierzonego. Zauważ, że podstawienie powłoki następuje przed przekazaniem poszczególnych argumentów
echo
, więc między wyjściemb
id
na wyjściu jest tylko jedna spacja , tak jakby to było w wierszu poleceńecho a b d
(z dwoma spacjami).źródło