Я хотел бы знать, как написать команду 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.
Содержимое файла рабочего стола должно выглядеть так (см. , как создать файл .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;
В первом случае поле Терминал
установлено на false
(возможно, вопреки вашим ожиданиям), а во втором case установлен на true
, но результат в обоих случаях одинаков.
!#/bin/bash
gnome-terminal -e YOUR_COMMANDS
Создайте указанный выше файл.Не забудьте sudo chmod + x filename.sh
Я делаю это. Первая строка текстового файла:! # / Bin / bash
Последующие строки текстового файла - это команды (сценарий оболочки).
Сохранить файл как something.sh
Открыть свойства файла и разрешить запуск файла как программы.
Теперь, когда файл дважды щелкают, я получаю возможность запустить его.
Egyszerűen adja hozzá az
;$SHELL
-t a parancsok végéhez.
Mint én , a snapd
nem valami, ami a rendszer teljes sávszélességével frissíti a pillanatfelvételeket, amikor majdnem éjszaka dolgozom.
Tehát ez nekem egy .sh
létrehozására szolgált. ] fájl kapcsolódik egy .desktop
fájlhoz.
Az .sh
fájl tartalma
echo <your password> | sudo -S systemctl stop snapd.service
sudo systemctl disable snapd.service;$SHELL
-S
volt az .sh
fájl első sorában. A STDINPUT
fájlt az fájlba küldte. ] sudo
parancs, amely jelszó megadása nélküli közvetlen végrehajtást jelent.
A .desktop
fájl tartalma a következő volt:
[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;
TL ;DR
[Desktop Entry]
Version=1.0
Name=Hello
Exec=sh -c 'echo hello; $SHELL'
Icon=utilities-terminal
Terminal=true
Type=Application
Как указано в спецификации записи рабочего стола , Terminal = true
указывает программе запуска запускать ваш сценарий в окне терминала. Выбор эмулятора терминала зависит от настроек приложений по умолчанию и среды рабочего стола. В GNOME это gnome-terminal, в KDE - Konsole. (Без DE, в простой WM есть ошибка в xdg-open, и Terminal = true
просто игнорируется, см. Проблему )
Вам нужна эта строка для запуска вашего скрипта и запустить оболочку после нее.
Exec=sh -c 'echo hello; $SHELL'
sh -c 'COMMAND'
запустить двоичный файл "sh", найденный в $ PATH, который
выполняет КОМАНДУ (во многих системах sh
является символической ссылкой на
bash
, но для переносимости предпочтительнее "sh") echo hello; $ SHELL
делает две вещи. Сначала запускается echo hello
а затем, после выполнения этой команды, запускает $ SHELL. Если вы не добавите какую-то команду, ожидающую вашего выхода, эмулятор терминала просто запустит вашу программу и выйдет .
PS Если вы просто не хотите закрывать свой терминал, вы можете сделать
Exec=sh -c 'echo hello; read'
или
Exec=sh -c 'echo hello; sleep 5'
(чтение будет ждать, пока вы нажмете Enter, сон просто подождет 5 секунд)
PPS $ SHELL
вероятно будет таким же, как последний раздел в / etc / passwd
в соответствии с вашим пользователем.
$ man login
Устанавливаются значения для $ HOME, $ USER, $ SHELL, $ PATH, $ LOGNAME и $ MAIL ac- в соответствии с соответствующими полями ввода пароля.