Ich habe Skripte ausgeführt, die eine Textdatei schreiben und sie dann in einem Editor öffnen. Wenn ich in meiner Desktopsitzung ein Terminalemulatorfenster öffne und das Skript ausführe, möchte ich, dass der Editor grafisch ist, z gedit
. Wenn ich jedoch über ConnectBot auf meinem Telefon oder ähnlichem angemeldet bin (keine Desktopsitzung), möchte ich, dass der Editor aktiviert ist nano
.
Derzeit muss ich 2 verschiedene Skripte verwalten, die bis auf den letzten Schritt identisch sind (oder das grafische ausführen lassen, Fehler ausschalten und die Datei dann manuell öffnen nano
). Zwei meist identische Skripte sind vom Standpunkt der Wartung aus ineffizient.
Kann ein Skript erkennen, in welcher dieser Situationen ich mich befinde, und den richtigen Editor öffnen?
(Ich habe Möglichkeiten gefunden, wie ein Skript erkennen kann, ob es in einem Terminalemulatorfenster oder durch Doppelklick ausgeführt wird, aber noch keine Möglichkeit gefunden, festzustellen, ob das Fenster auf einem Desktop ausgeführt wird ... Ich glaube nicht kennen die richtige Terminologie für Google)
quelle
$EDITOR
stattdessen das standardmäßig angegebene Programm verwendennano
und aufnano
dieses zurückgreifen, wenn es nicht festgelegt ist.Antworten:
Sie können die Umgebungsvariable
$DISPLAY
als Auslöser innerhalb einerif
Bedingung verwenden. Wenn diese Variable einen Wert hat, können Sie normalerweise grafische Anwendungen ausführen.Hier ist ein Bash- Beispiel:
Der Operator
-z
gibt true zurück, wenn die envvar$DISPLAY
leer ist und Ihr Skript ausgeführt wirdnano
. In allen anderen Fällen wird es ausgeführtgedit
.Nach diesem Kommentar von @ vurp0 :
Ich würde vorschlagen, den Testausdruck folgendermaßen zu ändern:
Somit werden die Werte der beiden Variablen zu einer gemeinsamen Zeichenfolge verkettet, die vom Operator verarbeitet wird
-z
.Verweise:
quelle
[[ -z ${DISPLAY} && -z ${WAYLAND_DISPLAY} ]]
Typischerweise verwenden virtuelle Terminals
/dev/pts
Pseudo-Terminals . Basierend auf der Ausgabe destty
Befehls können wir also eine einfachecase
Anweisung erstellen , um das Öffnen eines bestimmten Editors zu handhaben:Oder besser formatiert:
Im Vergleich zur Verwendung von Umgebungsvariablen ist dies etwas zuverlässiger und wenn man bedenkt, dass
case
Anweisungen mittty
Befehlen verwendet werden, die etwas portabler sind. Was wahrscheinlich am besten wäre, ist, beide mit zusätzlichen Tests zu kombinieren, wie z"/dev/tty"*) [ -n "$DISPLAY" ] && gedit ;;
quelle
tty
gibt/dev/tty1
, währendgnome-terminal
(erste Registerkarte) gibt/dev/pts/0
.gedit
sollte für den/dev/pts*
Fall sein. Ich habe sie während des Fehlertests in tty umgeschaltet und sie hier kopiert, ohne zurückzuschalten. Danke, schon bearbeitet.Folgendes habe ich verwendet:
Der Grund für diesen Code war folgende Frage: Die Desktop-Verknüpfung zum Bash-Skript stürzt ab und brennt
Sie können es so ändern, dass es so aussieht:
quelle