Inicie la terminal desde el método abreviado de teclado, ejecute el comando interactivo y salga en Ubuntu 17.10

Inicie la terminal desde el método abreviado de teclado, ejecute el comando interactivo y salga en Ubuntu 17.10

Estoy intentando realizar lo siguiente:

  1. abra una terminal gnome desde el método abreviado de teclado, diga Ctrl+Shift+E.
  2. Ejecute un comando en la terminal. Para ser más concretos, el comando es gio open $(fzf). El comando es interactivo e inicia un programa externo (como evince).
  3. Una vez iniciado el programa externo, cierre la terminal sin cerrar el programa externo.

El comando que me interesa para el paso 2 anterior es gio open $(fzf): selecciono un archivo usando el buscador difuso fzfy luego el comando gio openabre ese archivo con el programa predeterminado de gnome.

Puedo hacer los tres pasos anteriores uno por uno:

  1. Puedo vincular un atajo de teclado en la configuración para gnome-terminal: Abre una terminal como se esperaba.
  2. Luego escribo mi comando en la terminal recién abierta gio open $(fzf): si selecciono un archivo pdf fzf, se abre evince con el archivo seleccionado.
  3. Puedo escribir Ctrl+D para cerrar la terminal. Hacer esto hacenoevidencia cercana. Este es el comportamiento previsto.

y hacer estos tres pasos manualmente funciona.

Mi objetivo es automatizar lo anterior.Debería funcionar de la siguiente manera. Mientras escribo el método abreviado de teclado Ctrl+Mierda+E (o cualquier otro), se debería abrir un terminal gnome y gio open $(fzf)se debería ejecutar el comando. Tan pronto como finalice el comando interactivo (que abre un programa externo como evince), la terminal debería cerrarse automáticamente sin cerrar evince.

lo que he probado.

  • Agregar un atajo de teclado con el comando gnome-terminal -- bash -c "gio open $(fzf)"no funciona. Presionar la combinación de teclas no hace nada.
  • Si agrego el comando gio open $(fzf)$al final de mi .bashrc, un atajo de teclado con el comando gnome-terminalabre la terminal y se ejecuta el comando. Tan pronto como selecciono un archivo pdf, se abre evince con el archivo seleccionado (¡¡sí!!!). Pero luego, si presiono Ctrl+D, la terminal se cierra y también lo hace evince (¿tal vez porque evince es un subproceso?).
  • Si agrego el comando gio open $(fzf)$ && exital final de mi .bashrc, un atajo de teclado con el comando gnome-terminalabre la terminal y el comando se ejecuta, pero tan pronto como selecciono un archivo, la terminal se cierra sin abrir evince (es posible que evince se haya iniciado y haya obtenido cerrado inmediatamente, no lo sé).

Tenga en cuenta que jugar con .bashrc fue principalmente con fines de prueba, me gustaría evitar contaminar mi .bashrc.

Respuesta1

Pero luego, si presiono Ctrl+D, la terminal se cierra y también lo hace evince (¿tal vez porque evince es un subproceso?)

Sí, claro, es un subproceso y debes ejecutar este proceso como "separado". Después de eso, puede finalizar el proceso principal (en su caso, terminal).

Aquí hay una respuesta detallada sobre cómo ejecutar procesos independientes.

https://superuser.com/questions/178587/how-do-i-detach-a-process-from-terminal-entirely

Como otra forma puedes usar el siguiente atajo:

bash -c "some_command" > /dev/null &2>&1

En este caso, la ventana de terminal no se abrirá en absoluto y no necesitará agregar nada a su archivo .bashrc.

Respuesta2

Lo mismo me estaba molestando, así que responderé esta vieja pregunta. Lo encontré xdg-openy gio opentengo problemas con este tipo de script, y también noté que gnome-terminal tiene problemas con él. Por ejemplo, xdg-open puede abrir gedit para editar archivos de texto, pero no mostrar para ver archivos PDF. Entonces uso el siguiente script con xterm -e. Tenga en cuenta que esto dejará los archivos nohup.out en su directorio de inicio; puede redirigir stdout si eso le molesta.

#!/bin/bash

file="$(fzf)"

[ - n "$file" ] || exit 1

end="${file##*.}"

case $end in
  pdf | djvu | ps )
    exec nohup evince "$file"
    ;;
  * )
    exec nohup xdg-open "$file"
    ;;
esac

información relacionada