Настольный ярлык на катастрофические отказы сценария Bash и записи

Я создал ссылку в Наутилусе в ~/bin каталог для сценария удара, расположенного там. Затем я вырезал и вставил ссылку в ~/Desktop каталог.

Когда я нажимаю на него, ничто не появляется на экране. Если я щелкаю правой кнопкой по ссылке и выбору Run ничто не появляется также. Но я знаю, что это работает потому что conky шоу несколько центральных процессоров, имеющих высокую загрузку. Нормальный % ЦП должен составить 5% к 8%, но это колеблется приблизительно 79%. Каждый экземпляр ссылки берет приблизительно 5% ЦП плюс systemd берет 5% ЦП для журналирования. Температура обычно <50C, но в этом случае она колеблется вокруг 75C.

Я стрелял через journalctl и найденный оскорблением / проблема цикличного выполнения:

$ journalctl -b-1 | grep 'TERM environment variable not set.' | wc
  35763  357630 3325959

Я проверил гибкую ссылку, и это появляется хорошо:

lrwxrwxrwx  1 rick rick     30 Mar 26 10:14 Link to grub-display.sh -> /home/rick/bin/grub-display.sh*

Обратите внимание, что это - совершенно новый сценарий, который я просто отправил сегодня: Как отобразить меню личинки и опции без начальной загрузки?. В рамках сценария clear команда используется, который связан с TERM сообщения об ошибках в другом потоке здесь и здесь: Как я могу зафиксировать "переменную среды ТЕРМИНА не набор" предупреждение в затмении

Некоторые решения journalctl сообщение об ошибке выше требует взгляда на:

$ env | grep TERM
TERM=xterm-256color

Я задаюсь вопросом, является ли это чем-то ~/.bashrc когда Вы открываете терминал, но пропавшие без вести, когда настольный ярлык (ссылка) выполняет терминальную команду непосредственно?

grub-display.sh выполнения сценария удара, превосходные из окна терминала.

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

6
задан 26 March 2018 в 23:29

2 ответа

Проблемой является сценарий, полагается TERM причем переменная окружения является установкой. Рабочему столу Единицы Ubuntu не инициализировали это, когда сценарии называют. При открытии терминала с Ctrl+Alt+T, переменная является установкой.

Для тестирования системы создают немного названного сценария test-term.sh и заставьте его быть похожим на это:

#!/bin/bash

#See if $TERM has been set when called from Desktop shortcut

echo TERM environment variable: $TERM > ~/Downloads/test-term.txt
echo "Using env | grep TERM output below:" >> ~/Downloads/test-term.txt
env | grep TERM >> ~/Downloads/test-term.txt

exit 0

Создайте ссылку в Наутилусе к test-term.sh и выполненный ссылка. Затем проверьте выходной файл:

$ cat ~/Downloads/test-term.txt

TERM environment variable: dumb
Using env | grep TERM output below:
(... blank line appears here ...)

Поскольку Вы видите переменную среды TERM пробел когда команда env | grep TERM используется. Также переменная $TERM установлен на dumb который не удовлетворяет основанной на цвете, поддерживаемой мышью команде dialog очень хорошо.


Шаблонное решение

Краткосрочное решение состояло в том, чтобы включать шаблонный код наверху этих двух рассматриваемых сценариев:

# $TERM variable may be missing when called via desktop shortcut
CurrentTERM=$(env | grep TERM)
if [[ $CurrentTERM == "" ]] ; then
    notify-send --urgency=critical "$0 cannot be run from GUI without TERM environment variable."
    exit 1
fi
4
ответ дан 23 November 2019 в 07:59

"Решение" не состоит в том, чтобы запустить программы вне их необходимой среды неоднократно, не проверяя их статус выхода. dialog, whiptail, и т.д. предназначены для терминалов, таким образом, они, конечно, требуют TERM быть установленным. Таким образом, необходимо запустить те скрипты в терминале. То же самое произошло бы с Вашим "усовершенствованным" zenity, yad, и т.д., если выполнено без дисплея X11/Wayland.

В Вашем сценарии Вы проверяете вывод dialog при перенаправлении вывода ошибок с нормальным выводом. Таким образом, когда диалоговое окно "разрушает и записи" и печатает сообщение об ошибке, Вы затем сравниваете вывод ошибок в Вашем если условия! Почему Вы сделали бы это?

0
ответ дан 23 November 2019 в 07:59

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

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