Выполнение долгой команды, разделенной на несколько строк, в .desktop файле?

Скажите, что у нас есть этот файл, start-term-tabs.sh:

gnome-terminal \
  --tab --title="Term 1" \
    --working-directory=/tmp \
    -e "bash -i" \
  --tab-with-profile=Default --title="Term 2" \
    --working-directory=/home \
    -e "bash -i" \
  --tab-with-profile=Default --title="Term 3" \
    --working-directory=/etc \
    -e "bash -i"

Поскольку это - долгая команда, и по причинам readibility, мне нравится разделять ее в нескольких строках путем выхода из перевода строки на каждой строке. Путем выполнения chmod +x start-term-tabs.sh, Я могу дважды щелкнуть start-term-tabs.sh на рабочем столе и это запустится, но это покажет суперраздражение, 'Вы хотите выполнить "start-term-tabs.desktop" или отобразить его содержание?':

doyouwant

... на который я должен нажать "Run" каждый раз.

Теперь, я мог сделать a test.desktop файл как это:

[Desktop Entry]
Name=start-term-tabs test
Terminal=false
Type=Application
Icon=/usr/share/app-install/icons/terminal-tango.svg
Exec=/home/USER/Desktop/start-term-tabs.sh

... и после выполнения chmod +x test.desktop, все работает; но затем я должен управлять двумя файлами, и я вместо этого хотел бы управлять только одним файлом.

Так, я пытался прикрыть все выше gnome-terminal командная строка там, и когда это как одна строка в поле Exec:

Exec=gnome-terminal   --tab --title="Term 1"     --working-directory=/tmp     -e "bash -i"   --tab-with-profile=Default --title="Term 2"     --working-directory=/home     -e "bash -i"   --tab-with-profile=Default --title="Term 3"     --working-directory=/etc     -e "bash -i"

... это также хорошо работает, но для меня довольно трудно управлять им, когда это находится только на одной строке.

Но когда я пытаюсь разделить его в .desktop файле, который является:

[Desktop Entry]
Name=start-term-tabs test
Terminal=false
Type=Application
Icon=/usr/share/app-install/icons/terminal-tango.svg
Exec=gnome-terminal \
  --tab --title="Term 1" \
    --working-directory=/tmp \
    -e "bash -i" \
  --tab-with-profile=Default --title="Term 2" \
    --working-directory=/home \
    -e "bash -i" \
  --tab-with-profile=Default --title="Term 3" \
    --working-directory=/etc \
    -e "bash -i"

... затем, как только я сохраняю это, значок больше не показывают на .desktop файле, который является им, начинает быть похожим на это:

deskicon

... и таким образом, это не рассматривают как допустимый .desktop файл, поэтому когда по этому дважды щелкают, снова я добираюсь, "Делают Вы хотите выполнить..." подсказку, и даже если я говорю, что Выполнение, никакой терминал гнома не запущен, таким образом, что-то заканчивается ужасно здесь.

Так, как я мог разделить долгую команду для поля Exec в .desktop файле в нескольких строках, - возможно использование своего рода выхода - и все еще это работало правильно?

Я видел https://specifications.freedesktop.org/desktop-entry-spec/desktop-entry-spec-latest.html#exec-variables, и я попытался использовать \\ везде вместо просто \, но это не помогает - и я иначе не могу сказать то, что я должен сделать для получения этой работы...

2
задан 24 August 2016 в 12:18

1 ответ

У меня есть супер взлом, который включает установку переменной удара к содержанию скрипта, который Вы хотите запустить, затем повторяя ее в .desktop файл. Читайте мимо деталей моего определенного сценария, но обратите внимание на кавычки и точки с запятой. Взлом кодирует программу переменной оболочки, затем использует эхо, чтобы свернуть все новые строки в одну строку и добавить его в настольный файл средства запуска Gnome.

Для контекста, у меня есть файл по имени Win10.desktop, который соединяется с бездисплейным экземпляром VirtualBox; это реконфигурировало сетевой адаптер на основе того, прикрепляется ли ноутбук или автономен. Я нахожусь на RHEL 7.6 / Gnome 3.

(я, возможно, записал сценарий w/o пробелы, но это трудно считать. Я сохраняю оригинал в файле README_REINSTALL где-то в другом месте, в случае, если я когда-либо повреждаю свою систему и должен воссоздать ее с нуля.)

PROG='
PATH=/usr/lib/virtualbox:/usr/bin:bin ;
VM="{045c7bf0-555e-4675-b95c-f8814d689077}" ;
WNIC="wlo1" ;
DNIC="enp58s0u1u2" ;
VMNAME="Win10" ;
ACTION=$(zenity --list --text "Choose action for $VMNAME" --radiolist --column "" --column "" 
        --hide-header 
            TRUE  "Full GUI Start/Resume" 
            FALSE "Suspend") ;
case $ACTION in 
        Full*) 
            echo "Starting" ;
            grep -q $DNIC /proc/net/dev && vboxmanage modifyvm $VM --bridgeadapter1 $DNIC || 
                vboxmanage modifyvm $VM --bridgeadapter1 $WNIC ;
            exec vboxmanage startvm $VM --type gui 
        ;;
        Suspend*) 
            echo "Suspending" ;
            vboxmanage modifyvm $VM --bridgeadapter1 $WNIC ;
            exec vboxmanage controlvm $VM savestate
        ;; 
esac'

echo Exec=/usr/bin/bash -c \'$PROG\' >> Win10.desktop
0
ответ дан 2 December 2019 в 10:10

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

Похожие вопросы: