シェルスクリプト内でClipitを呼び出す

シェルスクリプト内でClipitを呼び出す

clipitスクリプト内で使用して実行しようとしています。 Polybarを再起動し、必要なすべてのプログラムを起動したいが(i3を再ロードしてもまだ実行されていない場合)、端末に手動で入力しないと起動が拒否されます。i3wmpolybarclipit

#!/usr/bin/env bash

# Terminate already running bar instances
killall -q polybar

echo 'Launching polybar...'
MONITOR=HDMI1 polybar default &

sleep 2

# Start applets if they're not running
for arg in "dunst" "clipit" "wpa_gui -qt"
do
    if ! ps ax | grep -v grep | grep -io "$arg"
    then
        echo "Launching $arg"
        exec $arg &
    fi
done

echo 'Polybar launched'
exit 0

私は単に別のファイルを入れてみましたが、exec clipit役に立ちませんでした。実行時にエラーはありません。以前使ったことがありましたxfce4-clipmanが、うまくいきました。切り替えた唯一の理由は、clipman終了するたびにi3が自分の記録を切り取ったからです。

どんな提案がありますか?

ベストアンサー1

コードでは、最初のコマンドはkillall -q polybarPolybarを終了してから2秒間スリープモードに切り替えます。

killallこれは非常に強力であり、パフォーマンスを予測することはできません。つまり、プロセスとその子孫を完全に終了するのにかかる時間を予測することはできません。

~によると男性killallプロセスを終了するようにシグナルを名前でプロセスに送信し、プロセスを名前で終了する方法を提供するツールです。

各信号には、信号が転送されるとプロセスがどのように機能するかを決定する現在の構成があります。

したがって、パフォーマンスを制御する必要がありますkillall

コードを少し変更すると役に立つと思います。たとえば、コードは終了プロセスが完全に完了するまで待つ必要があります。後で線形性を追加できます killall -q polybar。これにより、コードはプロセスが閉じるのを待ちます。

#!/usr/bin/env bash

# Terminate already running bar instances
killall -q polybar

# Wait until polybar have been completely shut down
while pgrep -u $UID -x polybar >/dev/null; do sleep 2; done

echo 'Launching polybar...'
MONITOR=HDMI1 polybar default &

# Start applets if they're not running
for arg in "dunst" "clipit" "wpa_gui -qt"
do
    if ! ps ax | grep -v grep | grep -io "$arg"
    then
        echo "Launching $arg"
        exec $arg &
    fi
done

echo 'Polybar launched'
exit 0

おすすめ記事