내 데몬을 최적화할 수 있는 방법이 있나요?

내 데몬을 최적화할 수 있는 방법이 있나요?

모니터가 연결되면 비디오 및 사운드 출력을 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

이렇게 하면 여러 줄의 코드를 업데이트하는 것을 기억할 필요 없이 한 곳에서 xrandr호출 매개변수 만 변경하면 됩니다.pactl

스크립트는 bash쉘 특정 기능을 사용하지 않으므로 쉘도 으로 변경했습니다 . 쉘 실행 파일을 명시적 으로 가리키고 싶을 수도 있습니다 /bin/sh.bashdash

호출 grep은 출력을 생성하지 않는 방식으로 수정되었으므로( ) -q정규식 일치( ) 대신 문자열 비교를 수행합니다 -F. 명령줄의 다음 항목은 검색 모드 입니다 -e. 패턴의 첫 번째 항목이 변수 확장인 경우 일반적으로 잘 작동합니다. 로 시작하는 값은 유틸리티를 혼동할 수 있기 때문입니다.grep-e-

전화번호 xrandr도 확인했어요pactl아니요profile반복 간에 변수 값이 변경되지 않은 경우 실행됩니다.

관련 정보