Существенная проблема заключается в том, что терминалы на основе VTE не обрабатывают командную строку таким же способом , что и xterm. Это помимо возможных проблем с опцией удержания (ненужной в этом обсуждении).
Кавычки в этой команде
xterm -e "sudo pacman -Syu;bash"
являются проблемой. Эта строка в кавычках представляет собой одиночный токен, переданный в xterm как единственный параметр.
В xterm сначала пробуются токены после -e
в качестве параметров для вызова execv. В противном случае он пытается выполнить что-то вроде "$ {SHELL: -sh}" -c "parameters"
(запускает предпочитаемую вами оболочку для интерпретации параметров
как командной строки).konsole делает то или другое (вероятно, первое, поскольку это было исходным поведением xterm, и большая часть дизайна konsole датируется концом 1990-х). Когда xterm был изменен для luit, альтернатива "отказ от этого" помогла с передачей параметров в luit.
Терминалы на базе VTE какое-то время пытались выполнить один аспект в одной опции командной строки, а другой - в другой (насколько я помню, -e
и -x
, но поменять местами роли двух опций и является предметом интересного отчета об ошибке Debian, которого я не вижу в данный момент). В текущей версии попытка
gnome-terminal -e "sudo pacman -Syu;bash"
не удалась, потому что она работает только с исходным поведением, подобным xterm. И (учитывая, что другие терминалы используют несколько более старые версии VTE), поскольку разработчики gnome-terminal (которые частично совпадают с разработчиками VTE ...) некоторое время назад отказались от опции -x
, эта опция недоступен для команды. Этот работает, потому что он следует исходной модели xterm:
gnome-terminal -e "bash -c \"sudo pacman -Syu;bash\""
Параметр -e
частично адресуется в Debian с помощью сценария оболочки, который пытается предоставить минимальный набор параметров (включая один для названия). Политика Debian для этого была основана на xterm в конце 1990-х годов и неоднократно обсуждалась.
Дополнительная литература: