Как функция / скрипт может сказать Xterm из терминологии?

Я хочу иметь функцию в .bash_login, которая отображает текст, если текущим терминалом является XTerm, но НЕ терминология. Когда я делаю echo $TERM в терминологии, он выводит xterm Как я могу отличить их?

4
задан 15 October 2013 в 04:14

2 ответа

Вот еще один (более простой ИМО) способ сделать это. У меня нет просветления, поэтому я не могу проверить его по терминологии, но я проверял его с помощью gnome-Terminal, Terminator и Xterm.

terminalPID=$(ps -o ppid= $PPID) # get the script's parent's PID (the terminal)
processName=$(ps -p $terminalPID -o comm=) # get the terminal's name by it's PID
terminalName='gnome-terminal' # specify what process name you want to check for

# do the checking

if [ $processName == $terminalName ] ; then 
    echo "You are using gnome-terminal!"
else 
    echo "You are using something else!"
fi

Теперь, чтобы выяснить имя процесса вашего терминала, откройте ваш терминал и запустите

ps -p $PPID -o comm=

Это выведет имя процесса терминала (если, конечно, вы используете bash ).

Более полная версия, которая проверяет наличие нескольких различных эмуляторов терминала, которые я установил:

terminalPID=$(ps -o ppid= $PPID) # get the script's parent's PID (the terminal)
processName=$(ps -p $terminalPID -o comm=) # get the terminal's name by it's PID

# do the checking

if [ $processName == 'gnome-terminal' ] ; then 
    echo "You are using gnome-terminal!"
elif [ $processName == 'xterm' ] ; then
    echo "You are using xterm!"
elif [ $processName == '/usr/bin/termin' ] ; then
    echo "You are using Terminator!"
else 
    echo "You are using something else!"
fi
0
ответ дан 15 October 2013 в 04:14

Я не знаю, является ли это «правильным» способом сделать это, но вы можете узнать, с какой командой был вызван родительский терминал, вызвав ps с идентификатором родительского процесса, полученным через встроенную оболочку $PPID, например

# get the shell's parent command from the PPID via ps
pcomm=$(ps -ocomm= $PPID)

Затем вы можете проверить значение командной строки - например, с помощью оператора case

# now do something based on the value of the parent terminal command
case "$pcomm" in
  "gnome-terminal")
  echo "parent is gnome-terminal"
  ;;
  "xterm")
  echo "parent is xterm"
  ;;
  "terminator")
  echo "parent is terminator"
  ;;
  *)
  echo "unknown parent terminal"
  ;;
esac
0
ответ дан 15 October 2013 в 04:14

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

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