web-dev-qa-db-fra.com

Un fichier de bureau ne peut pas exécuter de script dans un terminal

Je veux créer un bouton sur mon lxpanel pour lancer un programme qui affiche Hello World! dans un lxterminal contextuel. J'utilise donc la technique que j'ai précédemment implémentée avec succès dans Debian 7, à savoir:

  1. gedit /bin/hello.sh (contenu ci-dessous):

    #!/bin/bash
    echo 'Hello World!';
    
  2. gedit /usr/share/applications/hello1.desktop (ci-dessous):

    [Desktop Entry]
    Version=1.0
    Type=Application
    Name=Hello1
    Comment=Test the terminal running a command inside it
    Exec=lxterminal -e "/bin/hello.sh"
    StartupNotify=true
    Icon=utilities-terminal
    Terminal=true
    Categories=Utility;
    
  3. Dernier I chown et chmod les deux fichiers ci-dessus comme ci-dessous:

    -rwxr-xr-x 1 a adm 230  1月  1 13:02 /usr/share/applications/hello1.desktop*
    -rwxr-xr-x 1 a adm 240  1月  1 12:57 /usr/share/applications/hello1.desktop~*
    -rwxr-xr-x 1 a adm 194  1月  1 12:04 /usr/share/applications/hello.desktop*
    -rwxr-xr-x 1 a adm 195  1月  1 12:03 /usr/share/applications/hello.desktop~*
    -rwxrwxr-x 1 a adm  87  1月  1 12:35 /usr/share/applications//bin/hello.sh*
    -rwxrwxr-x 1 a a    87  1月  1    12:25 /usr/share/applications//bin/hello.sh~*
    -rwxrwxr-x 1 a adm 134 12月 13 09:56 /usr/share/applications//bin/hello_world.sh*
    

Malheureusement, quoi que je fasse, le fichier hello1.desktop ne peut ouvrir qu'un lxterminal vide et il n'y a pas de sortie.

J'utilise Lubuntu 14.04 et j'ai suivi les tutoriels suivants pour lier un fichier de bureau à un programme de script * .sh:

J'ai aussi fait les variations suivantes à hello1.desktop:

  • ligne 10 (dernière ligne) - je l'ai également essayé sans point-virgule.
  • ligne 9 (la ligne "Terminal") - essayé "faux"
  • la ligne 6 (la ligne "Exec") - a essayé ceci:

    Exec=sh /bin/hello.sh;
    Exec=lxterminal -e “/bin/hello.sh”
    Exec=/bin/hello.sh
    Exec=sh -c /bin/hello.sh
    Exec=lxterminal -x sh -c 'echo hello'
    Exec=sh -c 'gnome-terminal echo hello'
    Exec=sh -c 'echo hello'
    Exec=sh /bin/hello.sh
    Exec=sh -c /bin/hello.sh
    

Mais à la fin, ils sont tous identiques (sauf lorsque Terminal=false sur la ligne 9, il n’existe évidemment pas de terminal).

Je peux voir hello1 sous Système -> Accessoires, mais lorsque je clique dessus, un écran vide apparaît. Dans Debian 7.5 LXDE Wheezy, il est très facile de le faire avec succès, mais qu’est-ce qui ne va pas dans Lubuntu 14.04 pour rendre cela tellement plus difficile?

Andrew

2
afc888ny

J'ai réussi à dupliquer votre problème et à avoir une solution.

Comme votre recherche vous l'a dit, votre problème initial était d'avoir:

Terminal=true

ensemble avec:

Exec=lxterminal -e /bin/hello.sh

Le seul problème est que, lorsque vous utilisez:

Terminal=false

le terminal se ferme après l'exécution du script, bien qu'il exécute votre script. Votre script produisant si peu d’impressions, il n’est humainement pas possible de voir cela se dérouler. Cela ressemble donc à un "écran vide qui apparaît".

Autant que je sache (de man lxterminal et de Google), il n’existe aucun moyen spécifique de demander à lxterminal de rester ouvert après l’exécution d’un script. Vous devez donc modifier le script bash (c.-à-d. Votre hello.sh ) lui-même.

Par exemple, vous pouvez ajouter l’un des éléments suivants à la fin de votre script.

  1. echo "Press [ENTER] to exit" && read

    • Le terminal attendra que l'utilisateur frappe Enter. (En fait, tapez n'importe quoi suivi de Enter.)
  2. /bin/bash

    • Le terminal restera ouvert.

Pour plus d'informations sur le problème général lié à l'arrêt de la fermeture du shell après l'exécution d'une commande, y compris des informations sur les autres émulateurs de terminal, voir: Comment exécuter un script sans fermer le terminal?

En passant, le point-virgule à la fin du fichier Desktop ne fait rien, vous pouvez donc aussi le supprimer.

Résumé : La seule modification à apporter au fichier de bureau d'origine est Terminal=false, mais vous devez ajouter une ligne à la fin de votre script bash si vous voulez voir que le script a été exécuté.

1
harlandski