Tengo scripts que ejecuto que escriben un archivo de texto, luego lo abro en un editor. Si abro una ventana de emulador de terminal en mi sesión de escritorio y ejecuto el script, me gustaría que el editor sea gráfico como gedit
. Pero, si estoy conectado a través de ConnectBot en mi teléfono o similar (sin sesión de escritorio), me gustaría que fuera el editor nano
.
Actualmente tengo que mantener 2 scripts diferentes, idénticos excepto por el último paso (o dejar que se ejecute el gráfico, error apagado, luego abrir manualmente el archivo nano
). Tener dos scripts en su mayoría idénticos es ineficiente desde el punto de vista del mantenimiento.
¿Puede un script detectar en cuál de estas situaciones estoy y abrir el editor correcto?
(He encontrado formas para que un script detecte si se está ejecutando en una ventana del emulador de terminal o haciendo doble clic, pero aún no he encontrado una manera de detectar si la ventana se está ejecutando en un escritorio ... No creo que conoce la terminología correcta para google)
fuente
$EDITOR
por defecto en lugar denano
, y recurrirnano
si no está configurado.Respuestas:
Puede usar la variable de entorno
$DISPLAY
como desencadenante dentro de unaif
condición. Por lo general, cuando esta variable tiene un valor, puede ejecutar aplicaciones gráficas.Aquí hay un ejemplo de bash :
El operador
-z
devolverá true cuando envvar$DISPLAY
esté vacío y su script se ejecutaránano
, en todos los demás casos se ejecutarágedit
.De acuerdo con este comentario de @ vurp0 :
Sugeriría modificar la expresión de prueba de la siguiente manera:
Por lo tanto, los valores de las dos variables se concatenarán en una cadena común, que será procesada por el operador
-z
.Referencias
fuente
[[ -z ${DISPLAY} && -z ${WAYLAND_DISPLAY} ]]
Por lo general, los terminales virtuales usan
/dev/pts
pseudo terminales . Entonces, en base a la salida deltty
comando, podemos construir unacase
declaración simple para manejar la apertura de un editor particular:O formateado más bien:
En comparación con el uso de variables de entorno, esto es un poco más confiable y teniendo en cuenta que usa una
case
instrucción con untty
comando un poco más portátil. Lo que probablemente sería mejor es combinar ambos, con pruebas adicionales, como"/dev/tty"*) [ -n "$DISPLAY" ] && gedit ;;
fuente
tty
da/dev/tty1
, mientras quegnome-terminal
(primera pestaña) da/dev/pts/0
.gedit
debería ser por/dev/pts*
si acaso. Los cambié durante la prueba de error en tty y terminé copiando aquí sin volver a cambiar. Gracias, ya editado.Esto es lo que he estado usando:
La razón de este código fue esta pregunta: el acceso directo del escritorio a la secuencia de comandos Bash se bloquea y se quema
Puede modificarlo para que se vea así:
fuente