Создайте файл .desktop, который откроется и выполните команду в терминале.


39

Я хотел бы знать, как написать Execкоманду файла .desktop, чтобы открыть новый терминал и выполнить сценарий оболочки в нем. Скрипт оболочки работает и доступен всем пользователям. При запуске скрипта из терминала все работает, но не при попытке запустить скрипт из файла .desktop.

Вот несколько комбинаций, которые я уже пробовал:

Exec=gnome-terminal -x sh -c 'echo hello'
Exec=sh -c 'gnome-terminal echo hello'
Exec=sh -c 'echo hello'
Exec=echo hello

Опция терминала .desktop установлена ​​в значение true.

Ответы:


46

Содержимое файла рабочего стола должно выглядеть следующим образом (см., Как создать файл .desktop с помощью текстового редактора ):

[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;

Или:

[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;

В первом случае Terminalполе установлено на false(возможно, вопреки вашим ожиданиям), а во втором - на true, но результат в обоих случаях одинаков.


1
Первое решение работает для меня, поэтому я придерживаюсь его. Вы знаете, почему должен быть $ SHELL?
Paradiesstaub

1

Это сработало для меня, однако я хочу запустить команду с помощью sudo, затем, когда создатель использования запускается, он открывает терминал, запрашивая у меня пароль. Как запустить команду и предотвратить это поведение?
E_Angel

1
@EliasAlves Немного поздно, но для всех, кто читает это: вы не можете ожидать запуска команд, требующих привилегий root, без необходимости аутентификации. (Если вы явно не сконфигурируете свою систему для этого, что обычно является плохой идеей.)
code_dredd

Я думаю, что вопрос заключается в следующем: как сделать так, чтобы терминал отображался так, чтобы терминал не исчезал, чтобы мы могли вводить учетные данные
RockScience

2
!#/bin/bash

gnome-terminal -e YOUR_COMMANDS

Сделайте файл выше. Не забудьsudo chmod +x filename.sh


1
Проблема с этим решением состоит в том, что терминал исчезает немедленно, и пользователь не может что-то ввести.
Paradiesstaub

Я забыл, как это называется, но я думаю, что есть возможность сохранить терминал. Это может бытьhold
Mr.Lee

2

Просто добавь

;$SHELL 

в конце ваших команд.

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

Так что это сработало для меня, чтобы создать .shфайл, связанный с .desktopфайлом.
Содержимое для .shфайла было

echo <your password> | sudo -S systemctl stop snapd.service
sudo systemctl disable snapd.service;$SHELL

-Sв первой строке .shфайла используется для отправки STDINPUTв sudoкоманде означает прямое выполнение без ввода пароля.

Содержание для .desktopфайла было:

[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;

0

Я делаю это. Первая строка текстового файла:! # / Bin / bash

Последующими строками текстового файла являются команды (сценарий оболочки).

Сохраните файл как что-то .sh

Откройте свойства файла и включите запуск файла в качестве программы.

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


2
То же самое здесь, терминал исчезает сразу.
Paradiesstaub

У меня это работает без проблем. Создайте скрипт оболочки, добавьте строку! # / Bin / bash в качестве первой строки. Разрешить запуск файла в качестве исполняемого файла. Дважды щелкните и выберите запустить в терминале. Это просто работает.
Шляпник

1
Вы уверены, что терминал не просто закрывается, потому что скрипт оболочки завершен? В начале вашего сценария положить сон 30, терминал остается открытым в течение 30 секунд?
Шляпник
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.