รุ่นเดิม
วิธีหนึ่งในการทำเช่นนี้คือการรับโพรเซสแม่ของเชลล์ปัจจุบันของคุณและจากนั้นชื่อของเทอร์มินัล
รับพาเรนต์ของกระบวนการเชลล์ปัจจุบัน ตัวแปร bash $$
คือ PID ของเชลล์ปัจจุบันของคุณดังนั้นเราสามารถให้มันเป็นเคียวรีเพื่อps
( -p $$
) และขอให้มันพิมพ์ tp PID ของกระบวนการหลัก ( -o ppid=
การต่อท้าย=
คือการหลีกเลี่ยงการพิมพ์ส่วนหัวคอลัมน์):
$ ps -p $$ -o ppid=
544
ดังนั้น PID 544
ของผู้ปกครองเปลือกของฉันคือ
รับกระบวนการที่เกี่ยวข้องกับ PID นั้นและพิมพ์บรรทัดคำสั่ง
$ ps -p 544 o args=
/usr/bin/python /usr/bin/terminator
การส่งออกดังกล่าวจะขึ้นอยู่กับสิ่งจำลอง terminal terminator
คุณกำลังใช้ผมใช้
รวมทุกอย่างไว้ในคำสั่งเดียว
ps -p $(ps -p $$ -o ppid=) o args=
ใช้สิ่งนั้นเพื่อรับเวอร์ชัน
$(ps -p $(ps -p $$ -o ppid=) o args=) --version
terminator 0.97
เพิ่มฟังก์ชั่นเล็ก ๆ น้อย ๆ ของคุณ~/.bashrc
ที่ส่งคืนชื่อและรุ่นของเทอร์มินัลอีมูเลเตอร์ที่คุณใช้ (ใช้งานได้กับเทอร์มินัลอีมูเลเตอร์ทั่วไป):
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}')
}
ตอนนี้คุณจะได้รับชื่อของสถานีและยังผ่านตัวเลือกที่คุณต้องการใด ๆ กับมัน --version
(เช่น
ตัวอย่างบางส่วนที่ใช้เทอร์มินัลต่างๆ:
xterm
$ which_term
XTerm(297)
terminator
$ which_term
terminator 0.97
rxvt
หนึ่งนี้มีไม่มีของ-V
, -version
หรือ--version
ธงจึงไม่มีข้อมูลรุ่นจะมีการพิมพ์
$ 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/>.
ใหม่และปรับปรุง
วิธีการข้างต้นไม่น่าเชื่อถือ มันจะทำให้หายใจไม่ออกเมื่อคุณเรียกใช้เชลล์ของคุณหลังจากsu
ไอเอ็นจีกับผู้ใช้รายอื่นหรือเมื่อเทอร์มินัลของคุณมีนามแฝงกับบางสิ่งและกรณีอื่น ๆ เนื่องจากเราเห็นได้ชัดว่าทำงานร่วมกับโปรแกรม X ที่นี่วิธีที่ดีกว่าอาจใช้บางสิ่งเช่นxdotool
(ติดตั้งได้sudo apt-get install xdotool
) เพื่อรับข้อมูลแทน:
perl -lpe 's/\0/ /g' /proc/$(xdotool getwindowpid $(xdotool getactivewindow))/cmdline
ด้านบนจะพิมพ์บรรทัดคำสั่งที่ใช้เพื่อเปิดหน้าต่างที่ใช้งานในปัจจุบัน เนื่องจากเทอร์มินัลของคุณจะใช้งานได้อย่างแน่นอนนั่นคือคำสั่งที่จะแสดง ซึ่งหมายความว่าสำหรับเทอร์มินัลอีมูเลเตอร์ส่วนใหญ่คุณสามารถสันนิษฐานได้ว่าฟิลด์ที่ 1 ที่ส่งคืนคือชื่อเทอร์มินัล:
$ which_term
lxterminal
ซึ่งหมายความว่าการรับรุ่นนั้นเล็กน้อย ตัวอย่างเช่น
$ dpkg -l $(which_term) | awk '/^ii/{print $3}'
0.1.11-4
ไม่เหมาะสำหรับgnome-terminal
:
$ which_term
/usr/lib/gnome-terminal/gnome-terminal-server
หรือterminator
:
$ which_term
/usr/bin/python /usr/bin/terminator
ดังนั้นเราสามารถทำให้มันซับซ้อนขึ้นเล็กน้อย (มี bashisms บางอย่างที่นี่อันนี้ไม่ได้พกพา):
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"
}
สิ่งนี้ใช้ได้กับทุกกรณีที่ฉันทดสอบ