私のデーモンを最適化する方法はありますか?

私のデーモンを最適化する方法はありますか?

モニターが接続されたら、ビデオとサウンド出力をhdmiに変更するこのシェルスクリプトを作成しました。 systemdを介して有効にします。

#!/bin/bash
intern=eDP1
extern=DP1

while true; do
    if xrandr | grep "$extern disconnected"; then
        xrandr --output "$extern" --off --output "$intern" --auto
        pactl set-card-profile 0 output:analog-stereo+input:analog-stereo
    else
        xrandr --output "$intern" --off --output "$extern" --auto
        pactl set-card-profile 0 output:hdmi-stereo+input:analog-stereo
    fi
    sleep 1;
done

すべてが期待どおりに動作します。私のコードを最適化する方法に関する提案はありますか?

答え1

毎秒実行することに加えて、(過度のように聞こえる)アプリケーションは乾燥原理それに。これは、ループ内の単一の場所でのみ合計を呼び出すようにリファクタリングすることを意味しますxrandr(テストの追加呼び出しを除く)。pactlxrandr

#!/bin/sh

intern=eDP1
extern=DP1

while true; do
    if xrandr | grep -q -F -e "$extern disconnected"; then
        output_on=$intern
        output_off=$extern
        profile=analog
    else
        output_on=$extern
        output_off=$intern
        profile=hdmi
    fi

    if [ "$previous_profile" != "$profile" ]; then
        xrandr --output "$output_off" --off \
               --output "$output_on" --auto

        pactl set-card-profile 0 "output:$profile-stereo+input:analog-stereo"

        previous_profile=$profile
    fi

    sleep 1
done

これにより、複数行のコードを更新することを忘れずに、1つの場所でxrandr呼び出しパラメータを変更できます。pactl

スクリプトはbashシェル固有の機能を使用しないため、シェルもに変更しました。シェル実行可能ファイルを明示的にポイントしたい場合があります/bin/shbashdash

呼び出しgrepは出力を生成しないように変更されたため()-q正規表現の一致()ではなく文字列比較を実行します-F。コマンドラインの次の項目は検索モードです-e。パターンの最初の項目が変数拡張の場合、通常はうまく機能します。で始まる値は、ユーティリティを混同する可能性があるためです。grep-e-

電話番号xrandrも確認しました。pactlいいえprofile繰り返し間で変数の値が変更されていない場合に実行されます。

関連情報