画面の明るさスクリプトの実行速度を向上

画面の明るさスクリプトの実行速度を向上
xrandr --output LVDS-1 --brightness $(bc -l <<<"$(sed 's/Brightness: //' <<<$(xrandr --prop --verbose | grep Brightness)) $(if [ "$1" = "+" ];then echo +;else echo -;fi) 0.1")

現在、このコードはArchシステムのXFCEでキーボードショートカットとして設定されており、明るさを0.1ノッチの上下に調整するのに適しています。唯一の問題は、実行に1秒かかりますが、何回か押すと悪いことになり、コンピュータ全体の速度が遅くなる可能性があります。

コードをどのように改善しますか? (私はシェルスクリプトに最初に触れたので、私が書いたコールドコーディングコードの最適化を調べるために部分的に要求しています。)

編集:わかりました 、だから私はdrawbenn のプロファイリングアドバイス
に従いました


まあ、クエリするのが最大の問題です。現在の明るさレベルをいくつかのファイルに保存し、ショートカットキーが次のコードを実行するように変更しました。

#!/bin/bash
val=$(猫~/.bright_key_folder/lvl)
if ( [ "$1" == "+" ] && [[ $(bc -l ~/.bright_key_folder/lvl
    xrandr --output LVDS-1 --brightness$(cat ~/.bright_key_folder/lvl)
elif ( [ "$1" == "-" ] && [[ $(bc -l 0") == 1 ]] )
それから
    bc -l ~/.bright_key_folder/lvl
    xrandr --output LVDS-1 --brightness$(cat ~/.bright_key_folder/lvl)
フィリピン諸島

次に、起動時に明るさとファイル値の両方を1にリセットします。

答え1

まあ、まず3つの別々の外部プログラムを実行していますが、1つで十分です。awkたとえば、すべての解析と算術を実行できます。

xrandr --output LVDS-1 --brightness $(xrandr --prop --verbose | 
    awk "/Brightness:/{print \$2 $1 0.1; exit}")

awkスクリプトはexit出力全体を解析し、xrandr --prop --verbose最初の一致後に終了する必要がないことを保証しますBrightness:。その後、awkコマンドは二重引用符で囲まれているため、スクリプト$1のパラメータに展開され、\$22番目のフィールドはawkエスケープされて引用されます。

より高速なシェルを試すこともできます。デフォルト値がある場合は、bash実行スクリプトを試してくださいdash

答え2

コードが次のような場合すでに作業中しかし、実行速度が遅すぎるため、次のステップはプロファイリングを開始することです。シェルスクリプトを作成するときに各コマンドを実行するのにかかる時間を確認するには、ヘルプページを参照しtimeてください。help time

私はbcそれが速くなければならないと思い、sedラインとの戦いは速くなければならなかったので、私のシステムで両方のコマンドをプロファイリングするgrepことにしました。xrandr私はいくつかの簡単な見積もりを望んでいたので、コマンドを個別に実行してみました(平均を得るためにコマンドを何十回も実行するスクリプトでラップする代わりに)。

$ time xrandr --prop --verbose >/dev/null

real    0m0.428s
user    0m0.004s
sys     0m0.004s
$ time xrandr --output LVDS1 --brightness 0.9

real    0m0.117s
user    0m0.000s
sys     0m0.008s
$ 

同様の結果が得られる場合は、おそらく最も時間がかかるクエリです。

関連情報