Cree un archivo .desktop que se abra y ejecute un comando en una terminal
Me gustaría saber cómo escribir el Execcomando de un archivo .desktop para abrir un nuevo terminal y ejecutar un script de shell en él. El script de shell está funcionando y todos los usuarios pueden acceder a él. Al iniciar el script desde la terminal, todo funciona, pero no funciona cuando se intenta ejecutar el script desde un archivo .desktop.
Aquí hay algunas combinaciones que ya probé:
Exec=gnome-terminal -x sh -c 'echo hello'
Exec=sh -c 'gnome-terminal echo hello'
Exec=sh -c 'echo hello'
Exec=echo hello
La opción de terminal .desktop se establece en true.
Respuestas
El contenido de su archivo de escritorio debería verse como (vea cómo crear un archivo .desktop usando un editor de texto ):
[Desktop Entry]
Version=1.0
Name=Test
Comment=Test the terminal running a command inside it
Exec=gnome-terminal -e "bash -c 'echo hello;$SHELL'"
Icon=utilities-terminal
Terminal=false
Type=Application
Categories=Application;
O:
[Desktop Entry]
Version=1.0
Name=Test
Comment=Test the terminal running a command inside it
Exec=bash -c 'echo hello;$SHELL'
Icon=utilities-terminal
Terminal=true
Type=Application
Categories=Application;
En el primer caso, el Terminalcampo se establece en false(quizás contrariamente a sus expectativas) y en el segundo caso se establece en true, pero el resultado es en ambos casos el mismo.
Simplemente agregue
;$SHELL
al final de tus mandamientos.
Como para mí, snapdno es algo que use todo el ancho de banda del sistema para actualizar instantáneas cada vez que trabajo casi de noche.
Así que esto funcionó para mí para crear un .sharchivo vinculado a un .desktoparchivo.
El contenido del .sharchivo era
echo <your password> | sudo -S systemctl stop snapd.service
sudo systemctl disable snapd.service;$SHELL
-Sen la primera línea del .sharchivo se usa para enviar STDINPUTal sudocomando, lo que significa ejecución directa sin ingresar contraseña.
El contenido del .desktoparchivo fue:
[Desktop Entry]
Version=1.0
Name=Test
Comment=Test the terminal running a command inside it
Exec=gnome-terminal -e "/scripts/disable_snap.sh"
Icon=terminal
Terminal=true
Type=Application
Categories=Application;
!#/bin/bash
gnome-terminal -e YOUR_COMMANDS
Haz el archivo de arriba. No te olvides desudo chmod +x filename.sh
Hago esto. La primera línea del archivo de texto es! # / Bin / bash
Las siguientes líneas del archivo de texto son los comandos (el script de shell).
Guarde el archivo como something.sh
Abra las propiedades del archivo y habilite Ejecutar archivo como programa.
Ahora, cuando se hace doble clic en el archivo, tengo la opción de ejecutarlo.
TL; DR
[Desktop Entry]
Version=1.0
Name=Hello
Exec=sh -c 'echo hello; $SHELL'
Icon=utilities-terminal
Terminal=true
Type=Application
Como se indica en la especificación de entrada del escritorio , Terminal=truele dice al lanzador que inicie su script en una ventana de terminal. El emulador de terminal elegido depende de la configuración predeterminada de las aplicaciones y del entorno de escritorio. En GNOME, es gnome-terminal, en KDE, es Konsole. (Sin DE, en WM simple hay un error en xdg-open, y Terminal=truesimplemente se ignora, vea el problema )
Necesita esta línea para ejecutar su script y lanzar un shell después de él.
Exec=sh -c 'echo hello; $SHELL'
sh -c 'COMMAND'ejecute el binario "sh" que se encuentra en $ PATH que ejecuta COMMAND (en muchos sistemas,shes el enlace simbólico abash, pero para la portabilidad se prefiere "sh")echo hello; $SHELLhace dos cosas. Primero, se ejecutaecho helloy luego, después de la ejecución de este comando, lanza $ SHELL.
Si usted no añadir un poco de comandos que te espera para salir, un emulador de terminal se acaba de ejecutar su programa y de salida .
PD Si simplemente no desea cerrar su terminal, puede hacerlo
Exec=sh -c 'echo hello; read'
O
Exec=sh -c 'echo hello; sleep 5'
(la lectura esperará a que presione Enter, el sueño solo esperará 5 segundos)
PPS $SHELLprobablemente será el mismo que la última sección /etc/passwden línea con su usuario.
$ man login
El valor de $ HOME, $USER, $CASCARÓN, $PATH, $LOGNAME y $ MAIL se configuran de acuerdo con los campos correspondientes en la entrada de la contraseña.