Apakah ada kemungkinan untuk mendapatkan jenis terminal dengan perintah?
Jika saya menggunakan gnome-terminal
, hasilnya harus gnome-terminal
atau sesuatu yang serupa. Akan menyenangkan juga untuk mendapatkan versi terminal.
Memperbarui
ps -aux | grep `ps -p $$ -o ppid=`
akan menampilkan sesuatu seperti ini:
user 4239 0.0 0.7 292708 15744 pts/8 Sl 11:39 0:02 xfce4-terminal
user 4800 0.0 0.0 6176 820 pts/0 S+ 12:23 0:00 grep --color=auto 4239
Ini juga akan bekerja dengan xterm, tetapi bagaimana saya hanya mendapatkan nama ( xfce4-terminal
dalam hal ini)?
command-line
TuKsn
sumber
sumber
window 31457282 has no pid associated with it
(diuji di Lubuntu)Jawaban:
Versi asli
Salah satu cara untuk melakukan ini adalah dengan mendapatkan proses induk dari sesi shell Anda saat ini dan dari sana nama terminal.
Dapatkan orang tua dari proses shell saat ini. Variabel bash
$$
adalah PID dari shell Anda saat ini, sehingga kami dapat memberikannya sebagai permintaan untukps
(-p $$
) dan memintanya untuk mencetak PID dari proses induk (-o ppid=
, trailing=
adalah untuk menghindari mencetak tajuk kolom):Jadi, PID dari induk shell saya adalah
544
.Dapatkan proses yang terkait dengan PID itu dan cetak baris perintahnya
Output di atas akan tergantung pada emulator terminal apa yang Anda gunakan, saya menggunakan
terminator
.Gabungkan semuanya dalam satu perintah
Gunakan itu untuk mendapatkan versinya
Tambahkan sedikit fungsi ke Anda
~/.bashrc
yang mengembalikan nama dan versi emulator terminal yang Anda gunakan (ini berfungsi untuk sebagian besar emulator terminal umum):Anda sekarang bisa mendapatkan nama terminal dan juga memberikan opsi apa saja yang Anda suka (seperti
--version
.Beberapa contoh menggunakan terminal berbeda:
xterm
terminator
rxvt
, yang ini tidak memiliki-V
,-version
atau--version
bendera sehingga tidak ada info versi yang dicetak.gnome-terminal
.konsole
lxterminal
xfce4-terminal
Baru dan ditingkatkan
Pendekatan di atas tidak begitu dapat dipercaya. Ini akan tersedak ketika Anda menjalankan shell Anda setelah masuk
su
ke pengguna lain atau ketika terminal Anda dialihkan ke sesuatu dan berbagai kasus lainnya. Karena kami jelas bekerja dengan program X di sini, cara yang lebih baik mungkin dengan menggunakan sesuatu sepertixdotool
(dapat diinstal dengansudo apt-get install xdotool
) untuk mendapatkan informasi sebagai gantinya:Di atas akan mencetak baris perintah yang digunakan untuk meluncurkan jendela yang sedang aktif. Karena terminal Anda, mungkin, akan aktif, itu adalah perintah yang akan ditampilkan. Ini berarti bahwa untuk sebagian besar emulator terminal, Anda dapat dengan aman mengasumsikan bahwa bidang pertama yang dikembalikan adalah nama terminal:
Ini berarti mendapatkan versi itu sepele. Sebagai contoh
Tidak demikian untuk
gnome-terminal
:atau
terminator
:Jadi, kita bisa membuatnya sedikit lebih rumit (ada beberapa bashisme di sini, yang ini tidak portabel):
Ini berfungsi untuk semua kasus yang saya uji.
sumber
$PPID
untuk mendapatkan PID dari proses induk.ksh
atautcsh
. Itu adalah ide yang sangat bagus untuk keluarga bash karena itu jauh lebih sederhana daripada pendekatan saya.ksh93
danmksh
.Coba ini,
ATAU
sumber
rxvt
danterminator
dan yang kedua gagal padauxterm
dangnome-terminal
(mencetak/usr/lib/gnome-terminal/gnome-terminal-server
). Mereka semua akan gagal (seperti milik saya) jika Anda menggunakan sesi su.$PPID
adalah PID dari proses induk shell.comm
berarti perintah . Ini mungkin atau mungkin bukan jalan penuh, jadi kami gunakanbasename
untuk menghapus jalur jika perlu.Peringatan
Ini mungkin berlaku untuk setidaknya beberapa jawaban lain juga.
comm
secara teknisargv[0]
, yang sebenarnya bisa menjadi string sewenang-wenang. Tetapi secara umum, Anda harus dapat mengandalkannya untuk kasus khusus ini.Ini tidak akan berfungsi seperti yang diharapkan jika Anda terhubung melalui SSH atau menggunakan
tmux
,screen
atau yang serupa.sumber
termin
sebagai output.$PPID
ini tidak standar di semua shell. misalnya ditcsh
saya dapatkan:PPID: Undefined variable.
Anda dapat mencoba perintah berikut:Perbarui (terima kasih kepada OP dan Avinash Raj):
sumber
gnome-terminal 3.6.2-0ubuntu1l
dalam xterm?Kemungkinan lain (tidak sempurna) adalah:
Tapi ini tidak berfungsi dengan lxterminal karena ada variabel lingkungan
$WINDOWID
kosong ...Terminator menunjukkan nama "x-terminal-emulator".
sumber
Terminal saat ini juga dapat dideteksi melalui urutan keluar: Atribut Perangkat (DA Sekunder)
Misalnya dalam bash:
Ini hanya mengembalikan semacam id - dan sayangnya saya tidak tahu daftar resmi yang menerjemahkan ini ke nama sebenarnya.
Untuk implementasi nyata, yang menerjemahkan beberapa id yang dikenal menjadi nama terminal, lihat contoh bash script ini: https://github.com/mintty/utils/blob/master/terminal
sumber