У меня есть сценарии, которые я запускаю, которые записывают текстовый файл, а затем открывают его в редакторе. Если я открою окно эмулятора терминала в сеансе своего рабочего стола и запустлю скрипт, я бы хотел, чтобы редактор был графическим, например gedit
. Но если я войду через ConnectBot на моем телефоне или чем-то подобном (без сеанса на рабочем столе), я бы хотел, чтобы редактор был nano
.
В настоящее время я должен поддерживать 2 разных скрипта, идентичных, за исключением последнего шага (или запустить графический скрипт, отключить ошибку, затем вручную открыть файл nano
). Наличие двух в основном идентичных сценариев неэффективно с точки зрения обслуживания.
Может ли скрипт определить, в какой из этих ситуаций я нахожусь, и открыть правильный редактор?
(Я нашел способ для скрипта определить, запущен ли он в окне эмулятора терминала или двойным щелчком, но пока не нашел способа определить, работает ли окно на рабочем столе ... Не думаю, что знать правильную терминологию для Google)
источник
$EDITOR
по умолчанию, а не использовать ееnano
,nano
если она не установлена.Ответы:
Вы можете использовать переменную среды
$DISPLAY
как триггер вif
условии. Обычно, когда эта переменная имеет значение, вы можете запускать графические приложения.Вот пример bash :
Оператор
-z
вернет true, когда envvar$DISPLAY
пуст и ваш скрипт запуститсяnano
, во всех остальных случаях он запуститсяgedit
.Согласно этому комментарию @ vurp0 :
Я бы предложил изменить тестовое выражение следующим образом:
Таким образом, значения двух переменных будут объединены в общую строку, которая будет обработана оператором
-z
.Ссылки:
источник
[[ -z ${DISPLAY} && -z ${WAYLAND_DISPLAY} ]]
Обычно виртуальные терминалы используют
/dev/pts
псевдо-терминалы . Итак, основываясь на выводеtty
команды, мы можем создать простуюcase
инструкцию для открытия определенного редактора:Или лучше отформатировать:
По сравнению с использованием переменных окружения это немного более надежно, и, учитывая, что оно использует
case
оператор сtty
командой, немного более переносимым. Что, вероятно, было бы лучше, это объединить оба, с дополнительным тестированием, таким как"/dev/tty"*) [ -n "$DISPLAY" ] && gedit ;;
источник
tty
дает/dev/tty1
, тогда какgnome-terminal
(первая вкладка) дает/dev/pts/0
.gedit
должно быть на всякий/dev/pts*
случай. Я переключил их во время тестирования ошибок в tty и в итоге скопировал их здесь, не переключаясь обратно. Спасибо, отредактировал уже.Это то, что я использовал:
Причиной для этого кода был этот вопрос: ярлык на рабочем столе для Bash-скрипта вылетает и горит
Вы можете изменить это так:
источник