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
のパラメータに展開され、\$2
2番目のフィールドは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
$
同様の結果が得られる場合は、おそらく最も時間がかかるクエリです。