Створіть .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
@Thibaut Так, звичайно .
Radu Rădeanu

Це працювало для мене, проте я хочу запустити команду з 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
містер Лі

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.