web-dev-qa-db-de.com

Desktop-Datei kann kein Skript im Terminal ausführen

Ich möchte eine Schaltfläche auf meinem lxpanel erstellen, um ein Programm zu starten, das Hello World! In einem Popup-lxterminal ausgibt, also verwende ich die Technik, die ich zuvor in Debian 7 erfolgreich implementiert habe:

  1. gedit /bin/hello.sh (Inhalt unten):

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

    [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. Zuletzt habe ich chown und chmod beide der oben genannten Dateien wie folgt:

    -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*
    

Leider kann die Datei hello1.desktop, Egal was ich tue, nur ein leeres lxterminal öffnen, und es erfolgt keine Ausgabe.

Ich führe Lubuntu 14.04 aus und habe die folgenden Tutorials befolgt, um eine Desktop-Datei mit einem * .sh-Skriptprogramm zu verknüpfen:

Ich habe auch die folgenden Variationen an hello1.desktop Vorgenommen:

  • zeile 10 (letzte Zeile) - Ich habe es auch ohne Semikolon versucht.
  • zeile 9 (die "Terminal" -Linie) - versucht "falsch"
  • zeile 6 (die "Exec" -Zeile) - versuchte diese:

    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
    

Aber am Ende sind alle gleich (außer wenn Terminal=false In Zeile 9 offensichtlich kein Terminal vorhanden ist).

Ich kann hello1 Unter System -> Zubehör sehen, aber wenn ich darauf klicke, erscheint immer noch ein leerer Bildschirm. In debian 7.5 LXDE wheezy ist das wirklich einfach, aber was ist falsch an Lubuntu 14.04, um es so viel schwieriger zu machen?

Andrew

2
afc888ny

Ich habe es geschafft, Ihr Problem zu duplizieren und eine Lösung zu finden.

Wie Ihre Recherchen gezeigt haben, bestand Ihr ursprüngliches Problem darin,

Terminal=true

zusammen mit:

Exec=lxterminal -e /bin/hello.sh

Das einzige Problem ist, dass, wenn Sie verwenden:

Terminal=false

das Terminal wird nach der Ausführung des Skripts geschlossen, obwohl Ihr Skript tatsächlich ausgeführt wird. Da Ihr Skript so wenig Ausgabe produziert, ist es menschlich nicht möglich, dies zu sehen, und es scheint, als würde ein "leerer Bildschirm herausspringen".

Soweit ich sehen kann (von man lxterminal und von Google) gibt es keine spezielle Möglichkeit, lxterminal zu bitten, offen zu bleiben, nachdem es ein Skript ausgeführt hat. Sie müssen daher das Bash-Skript (d. h. Ihre Datei hello.sh) selbst ändern.

Sie können beispielsweise eine der folgenden Optionen am Ende Ihres Skripts hinzufügen.

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

    • Das Terminal wartet auf den Treffer des Benutzers Enter. (In der Tat etwas gefolgt von eingeben Enter.)
  2. /bin/bash

    • Das Terminal bleibt geöffnet.

Eine Beschreibung des allgemeinen Problems, dass die Shell nach Ausführung eines Befehls nicht geschlossen werden kann, einschließlich Informationen zu anderen Terminalemulatoren, finden Sie unter: Ausführen eines Skripts, ohne das Terminal zu schließen?

Übrigens macht das Semikolon am Ende der Desktop-Datei nichts, also können Sie es auch entfernen.

Zusammenfassung : Die einzige Änderung, die Sie an Ihrer ursprünglichen Desktop-Datei vornehmen müssen, ist Terminal=false, aber Sie müssen eine Zeile am Ende Ihres Bash-Skripts einfügen, wenn Sie sehen möchten, dass das Skript ausgeführt wurde.

1
harlandski