मूल संस्करण
ऐसा करने का एक तरीका आपके वर्तमान शेल सत्र की मूल प्रक्रिया को प्राप्त करना है और वहां से टर्मिनल का नाम है।
वर्तमान शेल प्रक्रिया के जनक प्राप्त करें। बैश वैरिएबल $$आपके वर्तमान शेल का PID है, इसलिए हम इसे एक क्वेरी ps( -p $$) के रूप में दे सकते हैं और इसे tp को पेरेंट प्रोसेस की PID प्रिंट करने के लिए कह सकते हैं ( -o ppid=, ट्रेलिंग =कॉलम हेडर से बचने के लिए ट्रेलिंग है):
$ ps -p $$ -o ppid=
544
तो, मेरे खोल के जनक की पीआईडी है 544।
उस PID से संबद्ध प्रक्रिया प्राप्त करें और उसकी कमांड लाइन प्रिंट करें
$ ps -p 544 o args=
/usr/bin/python /usr/bin/terminator
उपरोक्त आउटपुट इस बात पर निर्भर करेगा कि आप किस टर्मिनल एमुलेटर का उपयोग कर रहे हैं, मैं उपयोग कर रहा हूं 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को किसी अन्य उपयोगकर्ता के पास भेजेंगे या जब आपका टर्मिनल कुछ और विभिन्न अन्य मामलों के लिए अलियास किया जाएगा तो यह चोक हो जाएगा । चूंकि हम स्पष्ट रूप से एक्स कार्यक्रमों के साथ काम कर रहे हैं, इसलिए बेहतर तरीका यह हो सकता है कि इसके बजाय सूचना प्राप्त करने के लिए कुछ 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
इसलिए, हम इसे थोड़ा और अधिक जटिल बना सकते हैं (यहाँ कुछ बशीज़ हैं, यह एक पोर्टेबल नहीं है)
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"
}
यह मेरे द्वारा परीक्षण किए गए सभी मामलों के लिए काम करता है।