Orijinal versiyon
Bunu yapmanın bir yolu, mevcut kabuk oturumunuzun ana işlemini ve oradan terminalin adını almaktır.
Geçerli kabuk sürecinin üstünü al. Bash değişkeni $$
, mevcut kabuğunuzun PID değeridir, bu yüzden bunu bir sorgu olarak ps
( -p $$
) verebiliriz ve üst işlemin PID'sini yazdırmasını isteyebiliriz ( -o ppid=
takip eden =
sütun başlıklarının yazdırılmasını önlemektir):
$ ps -p $$ -o ppid=
544
Yani, benim kabuğumun ebeveyninin PID olduğunu 544
.
Bu PID ile ilişkili süreci alın ve komut satırını yazdırın
$ ps -p 544 o args=
/usr/bin/python /usr/bin/terminator
Yukarıdaki çıktı, kullandığınız terminal emülatörüne bağlı olarak değişecektir terminator
.
Her şeyi tek bir komutta birleştir
ps -p $(ps -p $$ -o ppid=) o args=
Sürümü almak için bunu kullanın.
$(ps -p $(ps -p $$ -o ppid=) o args=) --version
terminator 0.97
~/.bashrc
Kullanmakta olduğunuz terminal emülatörünün adını ve versiyonunu döndüren küçük bir fonksiyon ekleyin (bu, en yaygın terminal emülatörleri için geçerlidir):
which_term(){
term=$(ps -p $(ps -p $$ -o ppid=) -o args=);
found=0;
case $term in
*gnome-terminal*)
found=1
echo "gnome-terminal " $(dpkg -l gnome-terminal | awk '/^ii/{print $3}')
;;
*lxterminal*)
found=1
echo "lxterminal " $(dpkg -l lxterminal | awk '/^ii/{print $3}')
;;
rxvt*)
found=1
echo "rxvt " $(dpkg -l rxvt | awk '/^ii/{print $3}')
;;
## Try and guess for any others
*)
for v in '-version' '--version' '-V' '-v'
do
$term "$v" &>/dev/null && eval $term $v && found=1 && break
done
;;
esac
## If none of the version arguments worked, try and get the
## package version
[ $found -eq 0 ] && echo "$term " $(dpkg -l $term | awk '/^ii/{print $3}')
}
Artık terminalin adını alabilir ve istediğiniz herhangi bir seçeneği de iletebilirsiniz (örneğin --version
.
Farklı terminalleri kullanan bazı örnekler:
xterm
$ which_term
XTerm(297)
terminator
$ which_term
terminator 0.97
rxvt
Bu bir hiçbiri yoktur -V
, -version
ya da --version
hiçbir sürüm bilgisi basılır, böylece bayraklar.
$ which_term
rxvt 1:2.7.10-5
gnome-terminal
.
$ which_term
gnome-terminal 3.10.1-1
konsole
$ which_term
Qt: 4.8.6
KDE Development Platform: 4.11.3
Konsole: 2.11.3
lxterminal
$ which_term
lxterminal 0.1.11-4
xfce4-terminal
$ which_term
xfce4-terminal 0.6.2 (Xfce 4.10)
Copyright (c) 2003-2012
The Xfce development team. All rights reserved.
Written by Benedikt Meurer <benny@xfce.org>
and Nick Schermer <nick@xfce.org>.
Please report bugs to <http://bugzilla.xfce.org/>.
Yeni ve geliştirilmiş
Yukarıdaki yaklaşım bu kadar güvenilir değildir. Kabuğunuzu su
başka bir kullanıcıya girdikten sonra çalıştırdığınızda veya terminaliniz bir şey ve diğer çeşitli durumlara takılı kaldığında boğulacaktır. Açıkçası burada X programlarıyla çalıştığımız için, bunun yerine bilgiyi almak için benzer bir şey kullanmak xdotool
(kurulum yapılabilir sudo apt-get install xdotool
) kullanmak olabilir :
perl -lpe 's/\0/ /g' /proc/$(xdotool getwindowpid $(xdotool getactivewindow))/cmdline
Yukarıdakiler, aktif pencereyi başlatmak için kullanılan komut satırını basacaktır. Terminaliniz muhtemelen aktif olacağından, göstereceği komut bu olacaktır. Bu, çoğu terminal öykünücüsü için, döndürülen 1. alanın terminal adı olduğunu güvenli bir şekilde kabul edebileceğiniz anlamına gelir:
$ which_term
lxterminal
Bu, sürüm almanın önemsiz olduğu anlamına gelir. Örneğin
$ dpkg -l $(which_term) | awk '/^ii/{print $3}'
0.1.11-4
Öyle değil gnome-terminal
:
$ which_term
/usr/lib/gnome-terminal/gnome-terminal-server
veya terminator
:
$ which_term
/usr/bin/python /usr/bin/terminator
Böylece biraz daha karmaşık hale getirebiliriz (burada bazı temel bilgiler var, bu taşınabilir değil):
which_term(){
term=$(perl -lpe 's/\0/ /g' \
/proc/$(xdotool getwindowpid $(xdotool getactivewindow))/cmdline)
## Enable extended globbing patterns
shopt -s extglob
case $term in
## If this terminal is a python or perl program,
## then the emulator's name is likely the second
## part of it
*/python*|*/perl* )
term=$(basename "$(readlink -f $(echo "$term" | cut -d ' ' -f 2))")
version=$(dpkg -l "$term" | awk '/^ii/{print $3}')
;;
## The special case of gnome-terminal
*gnome-terminal-server* )
term="gnome-terminal"
;;
## For other cases, just take the 1st
## field of $term
* )
term=${term/% */}
;;
esac
version=$(dpkg -l "$term" | awk '/^ii/{print $3}')
echo "$term $version"
}
Bu, test ettiğim tüm durumlar için çalışıyor.