Я хочу иметь функцию в .bash_login
, которая отображает текст, если текущим терминалом является XTerm, но НЕ терминология. Когда я делаю echo $TERM
в терминологии, он выводит xterm
Как я могу отличить их?
Вот еще один (более простой ИМО) способ сделать это. У меня нет просветления, поэтому я не могу проверить его по терминологии, но я проверял его с помощью 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
Я не знаю, является ли это «правильным» способом сделать это, но вы можете узнать, с какой командой был вызван родительский терминал, вызвав 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