シェル スクリプトを開始するときに、シェル スクリプトを実行するコンソール ウィンドウを閉じずに、開いている他のすべてのコンソール ウィンドウを閉じることができるかどうかを知りたいです。
私はKubuntuの16.04 konsoleを使用しています。
前もって感謝します!
答え1
これは Wayland では動作しません。Ubuntu 17.10 以降を使用しており、ログイン時に Xorg を使用するように変更していない場合、この解決策は適していません。
私が使用しているこのようなタスクではxdotool
、まず次のコマンドでインストールする必要があります。
sudo apt install xdotool
これが私のスクリプトです:
#!/bin/bash
search="--class xterm"
a=$(xdotool getactivewindow getwindowpid)
b="$(xdotool search $search getwindowpid %@)"
for i in $b; do
[[ $a -ne $i ]] &&
echo kill $i
done
使用しているターミナルエミュレータについて言及がなかったため、ここではスクリプトを書きましたxterm
が、2行目の引用部分を変更することで簡単に変更できます。は、ウィンドウクラスのウィンドウに一致するオプション--class xterm
です。xdotool --search
xterm
man xdotool
これらのオプションについて知り、テストして使用するには
xdotool getactivewindow getwindowpid
アクティブなターミナルウィンドウのPIDを取得し、
xdotool search YOUROPTIONS getwindowpid %@
一致するすべてのウィンドウのPIDを取得するにはYOUROPTIONS
、例えば
xdotool search --all --name yourwindowsname --desktop 1 --class getwindowpid %@
yourwindowsname
デスクトップ上に存在する名前を持つすべてのウィンドウを一致させます1
。--all
は、両方の条件を満たす必要があることを意味します (論理「and」)。デフォルトでは、--any
その逆の意味になります。
すべての設定が完了し、スクリプトが正しいコマンドを出力したら、echo
スクリプトから を削除してアクションを実行しますkill
。
konsole
KDE の場合、報告される PID はxdotool
すべてのウィンドウで同じであることが判明したため、次のように少し異なるアプローチが必要になります。
#!/bin/bash
search="--onlyvisible --class konsole"
a=$(xdotool getactivewindow)
b="$(xdotool search $search)"
for i in $b; do
[[ $a -ne $i ]] &&
xdotool windowclose $i
done