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