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

$EDITORpor defecto en lugar denano, y recurrirnanosi no está configurado.Respuestas:
Puede usar la variable de entorno
$DISPLAYcomo desencadenante dentro de unaifcondición. Por lo general, cuando esta variable tiene un valor, puede ejecutar aplicaciones gráficas.Aquí hay un ejemplo de bash :
El operador
-zdevolverá true cuando envvar$DISPLAYesté 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/ptspseudo terminales . Entonces, en base a la salida delttycomando, podemos construir unacasedeclaració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
caseinstrucción con unttycomando 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
ttyda/dev/tty1, mientras quegnome-terminal(primera pestaña) da/dev/pts/0.geditdeberí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