Есть ли возможность получить тип терминала с помощью команды?
Если я использую gnome-terminal
, вывод должен быть gnome-terminal
или что-то подобное. Также было бы неплохо получить версию терминала.
Обновить
ps -aux | grep `ps -p $$ -o ppid=`
выведет что-то вроде этого:
user 4239 0.0 0.7 292708 15744 pts/8 Sl 11:39 0:02 xfce4-terminal
user 4800 0.0 0.0 6176 820 pts/0 S+ 12:23 0:00 grep --color=auto 4239
Это также будет работать с xterm, но как мне получить только имя ( xfce4-terminal
в данном случае)?
command-line
TuKsn
источник
источник
window 31457282 has no pid associated with it
(проверено на Lubuntu)Ответы:
Оригинальная версия
Один из способов сделать это - получить родительский процесс текущего сеанса оболочки и оттуда имя терминала.
Получить родителя текущего процесса оболочки. Переменная bash
$$
- это PID вашей текущей оболочки, поэтому мы можем передать ее как запрос кps
(-p $$
) и попросить tp напечатать PID родительского процесса (-o ppid=
конечный результат=
состоит в том, чтобы избежать печати заголовков столбцов):Итак, PID родителя моей оболочки есть
544
.Получить процесс, связанный с этим PID, и распечатать его командную строку
Приведенный выше вывод будет зависеть от того, какой эмулятор терминала вы используете, я использую
terminator
.Объедините все в одной команде
Используйте это, чтобы получить версию
Добавьте небольшую функцию к вашему
~/.bashrc
которая возвращает имя и версию используемого вами эмулятора терминала (это работает для большинства распространенных эмуляторов терминала):Теперь вы можете получить имя терминала, а также передать любую понравившуюся вам опцию (например,
--version
.Некоторые примеры использования разных терминалов:
xterm
terminator
rxvt
, у этого нет ни одного-V
,-version
или--version
флагов, поэтому информация о версии не печатается.gnome-terminal
,konsole
lxterminal
xfce4-terminal
Новый и улучшенный
Вышеуказанный подход не заслуживает доверия, хотя. Он захлебнется, когда вы запустите свою оболочку после
su
обращения к другому пользователю или когда ваш терминал привязан к чему-либо и другим различным случаям. Поскольку мы, очевидно, работаем здесь с программами X, лучшим способом может быть использование чего-то вродеxdotool
(устанавливаемого вместеsudo apt-get install xdotool
) для получения информации:Выше будет напечатана командная строка, используемая для запуска текущего активного окна. Поскольку ваш терминал, предположительно, будет активен, это команда, которую он покажет. Это означает, что для большинства эмуляторов терминалов можно смело предположить, что 1-е возвращенное поле является именем терминала:
Это означает, что получение версии тривиально. Например
Не так для
gnome-terminal
:или
terminator
:Таким образом, мы можем сделать его немного более сложным (здесь есть некоторые ошибки, этот не переносимый):
Это работает для всех случаев, на которых я тестировал.
источник
$PPID
чтобы получить PID родительского процесса.ksh
илиtcsh
. Это очень хорошая идея для семьи Баш, хотя это гораздо проще, чем мой подход.ksh93
иmksh
.Попробуй это,
ИЛИ
источник
rxvt
аterminator
второй не включаетсяuxterm
иgnome-terminal
(печатается/usr/lib/gnome-terminal/gnome-terminal-server
). Все они потерпят неудачу (как и мои), если вы используете сеанс su.$PPID
PID родительского процесса оболочки.comm
означает команду . Это может быть или не быть полный путь, поэтому мы используемbasename
его, если необходимо.Предостережения
Это, вероятно, относится, по крайней мере, к некоторым другим ответам.
comm
техническиargv[0]
, который на самом деле может быть произвольной строкой. Но в целом вы должны быть в состоянии положиться на это в данном конкретном случае.Это не будет работать должным образом, если вы подключаетесь через SSH или используете его
tmux
,screen
или что-то подобное.источник
termin
вывод.$PPID
это не является стандартным для всех оболочек. Например,tcsh
я получаю:PPID: Undefined variable.
Вы можете попробовать следующую команду:Обновление (спасибо OP и Avinash Raj):
источник
gnome-terminal 3.6.2-0ubuntu1l
в xterm?Другая (не идеальная) возможность:
Но это не работает с lxterminal, потому что переменная окружения
$WINDOWID
пуста ...Терминатор показывает название «x-терминал-эмулятор».
источник
Текущий терминал также может быть обнаружен с помощью escape-последовательности: Атрибуты устройства (вторичный DA)
Например, в bash:
Это возвращает только какой-то идентификатор - и, к сожалению, я не знаю официального списка, который переводит их в настоящие имена.
Для реальной реализации, которая переводит некоторые известные идентификаторы в имена терминалов, см. Пример сценария bash: https://github.com/mintty/utils/blob/master/terminal.
источник