Перезапустите bash-скрипт в терминале, если он запущен без терминала - PullRequest
0 голосов
/ 19 октября 2019

Я хочу, чтобы скрипт проверял, запущен ли он из окна терминала. Если он был запущен без окна, он должен перезапустить себя в видимом окне терминала.

Если найдена эта строка скрипта:

tty -s; if [ $? -ne 0 ]; then konsole -e "$0"; exit; fi

Работает нормально. Однако, поскольку он использует konsole, он специфичен для KDE. Есть ли более портативное решение, которое работает и в системе Linux без KDE?

1 Ответ

1 голос
/ 19 октября 2019

Не существует универсального решения, которое бы работало над ВСЕМИ оконными системами. Тем не менее, вы можете посмотреть на реализацию списка общих программ терминала. Хорошо, что все принимают '-e'.

if [ ... ] ; then
   for t in konsole gnome-terminal xterm ; do
       if type "$t" >/dev/null 2>&1 ; then
          $t -e "$@"
          break
       fi
   done

Также обратите внимание, что 'tty -s' проверяет, подключен ли ваш текущий stdin к терминалу. Возможно, вы захотите добавить тест для корректного отображения («$ DISPLAY»). Нет смысла запускать окно терминала, если оно не запущено в каком-либо оконном менеджере.

Вы можете улучшить код, проверив наличие переменных среды, которые сообщают вам, если вы работаете в терминале: 'GNOME_TERMINAL_SCREEN', 'XTERM_SHELL'или проверка $ TERM для xterm *.

...