J'ai des scripts que j'exécute qui écrivent un fichier texte, puis l'ouvrent dans un éditeur. Si j'ouvre une fenêtre d'émulateur de terminal dans ma session de bureau et que j'exécute le script, j'aimerais que l'éditeur soit graphique tel que gedit
. Mais, si je suis connecté via ConnectBot sur mon téléphone ou similaire (pas de session de bureau), j'aimerais que l'éditeur soit nano
.
Actuellement, je dois conserver 2 scripts différents, identiques à l'exception de la dernière étape (ou laisser le graphique s'exécuter, erreur désactivée, puis ouvrir manuellement le fichier nano
). Avoir deux scripts pour la plupart identiques est inefficace du point de vue de la maintenance.
Un script peut-il détecter dans laquelle de ces situations je me trouve et ouvrir l'éditeur approprié?
(J'ai trouvé un moyen pour un script de détecter s'il s'exécute dans une fenêtre d'émulateur de terminal ou en double-cliquant dessus, mais je n'ai pas encore trouvé de moyen de détecter si la fenêtre s'exécute sur un bureau ... Je ne pense pas que je connaître la bonne terminologie pour google)
la source
$EDITOR
par défaut à la place denano
, et le remplacernano
s'il n'est pas défini.Réponses:
Vous pouvez utiliser la variable d'environnement
$DISPLAY
comme déclencheur dans uneif
condition. Habituellement, lorsque cette variable a une valeur, vous pouvez exécuter des applications graphiques.Voici un exemple bash :
L'opérateur
-z
renverra true lorsque l'envvar$DISPLAY
est vide et votre script s'exécuteranano
, dans tous les autres cas, il s'exécuteragedit
.Selon le commentaire de @ vurp0 :
Je suggère de modifier l'expression de test de la manière suivante:
Ainsi, les valeurs des deux variables seront concaténées dans une chaîne commune, qui sera traitée par l'opérateur
-z
.Références:
la source
[[ -z ${DISPLAY} && -z ${WAYLAND_DISPLAY} ]]
Les terminaux virtuels utilisent généralement des
/dev/pts
pseudo-terminaux . Ainsi, sur la base de la sortie de latty
commande, nous pouvons créer unecase
instruction simple pour gérer l'ouverture d'un éditeur particulier:Ou mieux formaté:
Comparé à l'utilisation de variables d'environnement, c'est un peu plus fiable et considérant qu'il utilise une
case
instruction avec unetty
commande légèrement plus portable. Ce qui serait probablement le mieux est de combiner les deux, avec des tests supplémentaires, tels que"/dev/tty"*) [ -n "$DISPLAY" ] && gedit ;;
la source
tty
donne/dev/tty1
, tandis quegnome-terminal
(premier onglet) donne/dev/pts/0
.gedit
devrait être au/dev/pts*
cas où. Je les ai commutés pendant le test d'erreur dans tty et j'ai fini par le copier ici sans revenir en arrière. Merci, déjà édité.Voici ce que j'utilise:
La raison de ce code était cette question: le raccourci du bureau vers le script Bash plante et brûle
Vous pouvez le modifier pour ressembler à ceci:
la source