Файл рабочего стола не может запустить скрипт в терминале

Я хочу сделать кнопку на моей lxpanel, чтобы запустить программу, которая печатает Hello World! во всплывающем окне lxterminal, поэтому я использую технику, которую я успешно реализовал ранее в Debian 7, а именно:

  1. gedit /bin/hello.sh (содержание ниже):

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

    [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. Последний я chown а также chmod оба из приведенных выше файлов, как показано ниже:

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

К сожалению, что бы я ни делал, hello1.desktop только файл может открыть пустой lxterminal, и нет вывода.

Я использую Lubuntu 14.04 и следую приведенным ниже инструкциям, чтобы связать файл рабочего стола со скриптовой программой *.sh:

Я также сделал следующие изменения в hello1.desktop:

  • строка 10 (последняя строка) - я тоже пробовал без точки с запятой.
  • строка 9 (строка "Терминал") - пробовал "ложь"
  • строка 6 (строка "Exec") - пробовал это:

    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
    

Но в итоге все одинаковы (кроме случаев, когда Terminal=false в строке 9 нет терминала, очевидно).

я могу видеть hello1 под System -> Accessories, но когда я нажимаю на нее, все равно появляется только пустой экран. В Debian 7.5 LXDE wheezy это действительно легко сделать успешно, но что плохого в Lubuntu 14.04, чтобы сделать его намного сложнее?

Эндрю

1 ответ

Мне удалось продублировать вашу проблему и найти решение.

Как показало ваше исследование, вашей первоначальной проблемой было:

Terminal=true

вместе с:

Exec=lxterminal -e /bin/hello.sh

Единственная проблема в том, что при использовании:

Terminal=false

Терминал закрывается после выполнения скрипта, хотя на самом деле он запускает ваш скрипт. Поскольку ваш сценарий производит так мало результатов, по-человечески невозможно увидеть, как это происходит, поэтому он выглядит как "пустой экран".

Насколько я могу видеть (из man lxterminal и от Google), нет конкретного способа попросить lxterminal оставаться открытым после того, как он выполнил сценарий, поэтому вы должны изменить сам сценарий bash (т.е. ваш hello.sh).

Например, вы можете добавить любое из следующего в конец вашего скрипта.

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

    • Терминал будет ждать, пока пользователь нажмет Enter. (Фактически, чтобы набрать что-нибудь, нажмите Enter.)
  2. /bin/bash

    • Терминал останется открытым.

Для обсуждения общей проблемы остановки оболочки после выполнения команды, включая информацию о других эмуляторах терминала, смотрите: Как запустить скрипт, не закрывая терминал?

Кстати, точка с запятой в конце файла рабочего стола ничего не делает, так что вы можете удалить его.

Сводка. Единственное изменение, которое необходимо внести в исходный файл рабочего стола, - это Terminal=false, но вам нужно добавить строку в конец вашего bash-скрипта, если вы хотите увидеть, что скрипт запущен.

Другие вопросы по тегам