Estoy intentando realizar lo siguiente:
- abra una terminal gnome desde el método abreviado de teclado, diga Ctrl+Shift+E.
- 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). - 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 fzf
y luego el comando gio open
abre ese archivo con el programa predeterminado de gnome.
Puedo hacer los tres pasos anteriores uno por uno:
- Puedo vincular un atajo de teclado en la configuración para
gnome-terminal
: Abre una terminal como se esperaba. - Luego escribo mi comando en la terminal recién abierta
gio open $(fzf)
: si selecciono un archivo pdffzf
, se abre evince con el archivo seleccionado. - 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 comandognome-terminal
abre 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)$ && exit
al final de mi .bashrc, un atajo de teclado con el comandognome-terminal
abre 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-open
y gio open
tengo 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