Как я могу получить имя текущего терминала из командной строки?

Есть ли возможность получить тип терминала с помощью команды?

Если я использую gnome-terminal, вывод должен быть gnome-terminal или что-то подобное. Было бы неплохо получить версию терминала.

Update

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 в этом случае)?

1
задан 11 June 2014 в 05:11

4 ответа

Попробуйте это,

ps -aux | grep `ps -p $$ -o ppid=` | awk 'NR==1{print $11}'

ИЛИ

ps -aux | grep `ps -p $$ -o ppid=` | awk 'NR==1{print $NF}'
7
ответ дан 24 May 2018 в 06:59
  • 1
    Первый не работает на rxvt и terminator, а второй не работает на uxterm и gnome-terminal (он печатает /usr/lib/gnome-terminal/gnome-terminal-server). Они будут терпеть неудачу (как и мои), если вы используете сеанс su. – terdon♦ 4 June 2014 в 17:16
basename "$(cat "/proc/$PPID/comm")"

$PPID - это PID родительского процесса оболочки. comm означает команду. Это может быть или не быть полным путем, поэтому мы используем basename, чтобы удалить путь, если это необходимо.

Предостережения

Они, вероятно, применимы, по крайней мере, к некоторым другим ответам .

comm технически argv[0], который фактически может быть произвольной строкой. Но в целом вы должны быть в состоянии полагаться на это в этом конкретном случае. Это будет работать не так, как ожидалось, если вы подключаетесь через SSH или используете tmux, screen или что-то подобное.
6
ответ дан 24 May 2018 в 06:59
  • 1
    Это очень приятно +1, но на терминаторе терминатора я получаю только termin в качестве вывода. – TuKsn 4 June 2014 в 22:06
  • 2
    Я не знаю, почему, вероятно, это ошибка Терминатора. – nyuszika7h 4 June 2014 в 22:23
  • 3
    Это потому, что он запускается как скрипт python, я думаю. Это очень раздражает. – terdon♦ 4 June 2014 в 23:04
  • 4
    Обратите внимание, что $PPID не является стандартным для всех оболочек. например в tcsh я получаю: PPID: Undefined variable. – arielf 7 June 2014 в 04:05

Вы можете попробовать следующую команду:

$ dpkg-query -W $COLORTERM
gnome-terminal  3.6.2-0ubuntu1

Обновить (спасибо OP и Avinash Raj):

$ dpkg-query -W $(ps -aux | grep "`ps -p $$ -o ppid=`" | awk 'NR==1{print $11}' | xargs basename)
rxvt    1:2.7.10-5
1
ответ дан 24 May 2018 в 06:59
  • 1
    Я думаю, он хочет знать это для активного сеанса терминала. Так что, если он использует " putty " в то время ... – Rinzwind 4 June 2014 в 15:02
  • 2
    Нет не более "шпатлевки". но что насчет xterm, с этой командой я получаю также gnome-terminal 3.6.2-0ubuntu1l в xterm? – TuKsn 4 June 2014 в 15:08
  • 3
    Это не печатает терминал, который вы используете в данный момент. Он печатает все, что было установлено по умолчанию $ COLORTERM, что не имеет никакого отношения к тому, что вы используете в то время. – terdon♦ 4 June 2014 в 15:12
  • 4
    Обновление также хорошо работает с xterm и показывает версию и имя. – TuKsn 4 June 2014 в 15:39
  • 5
    Весь кредит принадлежит @Avinash и вам за правильную команду. Я только что добавил версию. – Sylvain Pineau 4 June 2014 в 15:41

Другая (не идеальная) возможность:

xprop -id $WINDOWID WM_CLASS | cut -d" " -f3 | sed 's/^.\(.*\)..$/\1/'

Но это не работает с lxterminal, потому что есть переменная среды $WINDOWID пустая ...

Terminator показывает имя «x-terminal-emulator».

0
ответ дан 24 May 2018 в 06:59

Другие вопросы по тегам:

Похожие вопросы: