Como uma função / script pode dizer ao Xterm da Terminologia?

4

Eu quero ter uma função em .bash_login que exiba texto se o terminal atual for XTerm, mas NÃO Terminologia. Quando eu faço echo $TERM em Terminologia, ele gera xterm Como posso diferenciá-los?

    
por user202632 14.10.2013 / 17:27

2 respostas

4

Eu não sei se esta é a maneira 'certa' de fazê-lo, mas você pode encontrar com qual comando o terminal pai foi invocado chamando ps com o ID do processo pai obtido através do shell embutido $PPID eg

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

Você pode então testar o valor da string de comando - por exemplo, usando uma instrução 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
    
por steeldriver 14.10.2013 / 20:22
2

Aqui está uma outra maneira (mais simples, IMO) de fazer isso. Eu não tenho iluminação, então não posso testar em Terminologia, mas testei com gnome-terminal, terminator e 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

Agora, para descobrir o nome do processo do seu terminal, abra seu terminal e execute

ps -p $PPID -o comm=

Isso imprimirá o nome do processo do terminal (desde que você esteja executando o bash, é claro).

Uma versão completa que verifica vários emuladores de terminal diferentes que eu instalei:

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
    
por Seth 14.10.2013 / 22:00