Cree un archivo .desktop que se abra y ejecute un comando en una terminal

Mar 20 2014

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

52 RaduRădeanu Mar 21 2014 at 02:11

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.

3 user225 Mar 18 2019 at 02:54

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;
2 Mr.Lee Mar 20 2014 at 21:10
!#/bin/bash

gnome-terminal -e YOUR_COMMANDS

Haz el archivo de arriba. No te olvides desudo chmod +x filename.sh

hatterman Mar 20 2014 at 21:05

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.

JulianCoffee May 23 2020 at 17:59

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'
  1. sh -c 'COMMAND'ejecute el binario "sh" que se encuentra en $ PATH que ejecuta COMMAND (en muchos sistemas, shes el enlace simbólico a bash, pero para la portabilidad se prefiere "sh")
  2. echo hello; $SHELLhace dos cosas. Primero, se ejecuta echo 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.