複数のプログラムの実行を防ぐ[閉じる]

複数のプログラムの実行を防ぐ[閉じる]

いくつかのプログラム、例えば。firefox、複数のインスタンスを受け入れます。これはいくつかのケース(たとえば、新しいインスタンス)には便利ですが、通常はxterm多くのデータが得られます。

インスタンスが1つだけ必要なプログラムを構成できますか?

ベストアンサー1

私は主にキーボードショートカットを使用してGUIアプリケーションを起動し、単一のインスタンスのみが必要なアプリケーションの場合は、最後の実行インスタンスを提供するか、そのウィンドウを前に配置するラッパーのショートカットを指定するか、新しいインスタンスを生成します。一つもないなら。

私は持っています:

ロネフ:

#!/bin/sh -e
#lastof or new -- try lastof and give me a new instance if it failed
cmd=$1; shift
lastof "$cmd" || exec "$cmd" "$@"

ラストフ:

#!/bin/sh -e
#give me the last used instance of the GUI app matching $@

results=$(xdotool search "$@")
result=$(echo "$results" | 
    while read -r id; do echo "$(xprop -id $id '_NET_WM_USER_TIME')" "$id"; done | 
    sed -n 's/.*= //p' |sort -n |
    tail -1| cut -d\  -f2
)
[ -n "$result" ] || result=$(echo "$results" | tail -1)
exec xdotool windowactivate "$result"

たとえば、端末エミュレータを起動するショートカット設定は次のとおりです。

Ctrl+Alt+K : lonew konsole
Ctrl+Shift+Alt+K :  konsole #force a new instance

一部のアプリケーション(BansheeやThunderbirdなど)は、この単一のインスタンスを独自に効果的に管理できますが、必要なすべてのアプリケーションに含めることができるスタンドアロンの「1つのタスクをうまく実行する」ソリューションを持つことが便利であることがわかりました。思う。


依存関係:xprop、xdotool

おすすめ記事