シェルスクリプトを実行しているものを除いて開いているすべてのターミナルウィンドウを閉じる方法

シェルスクリプトを実行しているものを除いて開いているすべてのターミナルウィンドウを閉じる方法

シェル スクリプトを開始するときに、シェル スクリプトを実行するコンソール ウィンドウを閉じずに、開いている他のすべてのコンソール ウィンドウを閉じることができるかどうかを知りたいです。

私は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 --searchxtermman 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


konsoleKDE の場合、報告される 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

関連情報