화면 밝기 스크립트 실행 속도 향상

화면 밝기 스크립트 실행 속도 향상
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의 프로파일링 조언을 따랐고 이것을 얻었습니다:
time xrandr -q --verbose > /dev/null
real 0m1.746s
user 0m0.007s
sys 0m0.000s

글쎄, 쿼리하는 것이 가장 큰 문제입니다. 현재 밝기 수준을 일부 파일에 저장하고 바로 가기 키가 다음 코드를 실행하도록 변경했습니다.

#!/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

글쎄요, 우선 세 가지 별도의 외부 프로그램을 실행하고 있는데, 한 개면 충분합니다. 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두 번째 필드는 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
$ 

비슷한 결과를 얻는다면 아마도 가장 많은 시간이 걸리는 쿼리일 것입니다.

관련 정보