Mam uruchomione skrypty, które zapisują plik tekstowy, a następnie otwierają go w edytorze. Jeśli otworzę okno emulatora terminala w sesji pulpitu i uruchomię skrypt, chciałbym, aby edytor był graficznym, takim jak gedit
. Ale jeśli jestem zalogowany przez ConnectBot na telefonie lub podobnym urządzeniu (bez sesji na komputerze), chciałbym, aby edytor był nano
.
Obecnie muszę utrzymywać 2 różne skrypty, identyczne z wyjątkiem ostatniego kroku (lub pozwolić graficznemu uruchomić, wyłączyć błąd, a następnie ręcznie otworzyć plik nano
). Posiadanie dwóch w większości identycznych skryptów jest nieefektywne z punktu widzenia konserwacji.
Czy skrypt może wykryć, w której z tych sytuacji jestem, i otworzyć odpowiedni edytor?
(Znalazłem sposoby na wykrycie przez skrypt, czy działa on w oknie emulatora terminala, czy poprzez podwójne kliknięcie, ale jeszcze nie znalazłem sposobu na wykrycie, czy okno działa na pulpicie ... Nie sądzę znać poprawną terminologię wyszukiwarki Google)
źródło
$EDITOR
domyślnie zamiastnano
i powrócić donano
niego, jeśli nie jest ustawiony.Odpowiedzi:
Możesz użyć zmiennej środowiskowej
$DISPLAY
jako wyzwalacza w ramachif
warunku. Zwykle, gdy ta zmienna ma wartość, możesz uruchamiać aplikacje graficzne.Oto przykład bash :
Operator
-z
zwróci wartość true, gdy envvar$DISPLAY
będzie pusty, a skrypt zostanie uruchomionynano
, we wszystkich innych przypadkach zostanie uruchomionygedit
.Zgodnie z tym komentarzem @ vurp0 :
Sugerowałbym zmodyfikować wyrażenie testowe w następujący sposób:
Zatem wartości dwóch zmiennych zostaną połączone w jeden ciąg, który zostanie przetworzony przez operatora
-z
.Bibliografia:
źródło
[[ -z ${DISPLAY} && -z ${WAYLAND_DISPLAY} ]]
Zwykle terminale wirtualne używają
/dev/pts
pseudoterminalów . Opierając się na danych wyjściowychtty
polecenia, możemy zbudować prostącase
instrukcję do obsługi otwierania konkretnego edytora:Lub ładniej sformatowany:
W porównaniu do używania zmiennych środowiskowych jest to nieco bardziej niezawodne, a biorąc pod uwagę, że używa
case
instrukcji ztty
poleceniami nieco bardziej przenośnymi. Prawdopodobnie najlepszym rozwiązaniem byłoby połączenie obu z dodatkowymi testami, takimi jak"/dev/tty"*) [ -n "$DISPLAY" ] && gedit ;;
źródło
tty
daje/dev/tty1
, podczas gdygnome-terminal
(pierwsza karta) daje/dev/pts/0
.gedit
powinno być na/dev/pts*
wszelki wypadek. Zamieniłem je podczas testowania błędów w tty i skończyłem kopiowanie go tutaj bez przełączania z powrotem. Dzięki, już edytowane.Właśnie tego używałem:
Przyczyną tego kodu było następujące pytanie: Skrót pulpitu do skryptu Bash ulega awarii i wypaleniu
Możesz go zmodyfikować, aby wyglądał następująco:
źródło