2016-11-11 3 views
0

필자는 두 개의 포트가있는 랩톱에 연결된 화면을 토대로 외부 화면을 전환 할 수있는 bash 스크립트를 만들려고합니다. 솔직히 bash에 대한 나의 전문 지식은 제한적이므로 논리적 bash 실수 일 수도 있습니다.두 화면 토글 xrandr

#!/bin/bash 

HDMI=$(xrandr | grep 'HDMI' | cut -d ' ' -f 1) 
LVDS=$(xrandr | grep 'LVDS' | cut -d ' ' -f 1) 
VGA=$(xrandr | grep 'VGA' | cut -d ' ' -f 1) 

HDMI_CON=$(xrandr | grep "$HDMI connected") 
HDMI_DIS=$(xrandr | grep "$HDMI disconnected") 
VGA_CON=$(xrandr | grep "$VGA connected") 
VGA_DIS=$(xrandr | grep "$VGA disconnected") 

if [ VGA_CON ] && [ HDMI_CON ] 
then 
    echo "VGA CON, HDMI CON" 
elif [ VGA_CON ] && [ HDMI_DIS ] 
then 
    echo "VGA CON, HDMI DIS" 
elif [ VGA_DIS ] && [ HDMI_CON ] 
then 
    echo "VGA DIS, HDMI CON" 
else 
    echo "VGA DIS, HDMI DIS." 
fi 

무엇 발생하는 것은, VGA_CON & & HDMI_CON 항상 true를 돌려 것입니다 항상 두 디스플레이가 연결되어 생각하고 내 스크립트 결과 : 나는 다음과 같은 스크립트를 가지고있다. 무슨 일이 일어나고 있는지 나에게 깨달을 수있는 사람?

답변

1

$() 구문을 사용하면 해당 변수를 xrandr에 의해 생성 된 출력 문자열과 동일하게 설정합니다.

#!/bin/bash 

HDMI=$(xrandr | grep 'HDMI' | cut -d ' ' -f 1) 
LVDS=$(xrandr | grep 'LVDS' | cut -d ' ' -f 1) 
VGA=$(xrandr | grep 'VGA' | cut -d ' ' -f 1) 

HDMI_CON=$(xrandr | grep -q "$HDMI connected" ; echo $?) 
HDMI_DIS=$(xrandr | grep -q "$HDMI disconnected" ; echo $?) 
VGA_CON=$(xrandr | grep -q "$VGA connected" ; echo $?) 
VGA_DIS=$(xrandr | grep -q "$VGA disconnected" ; echo $?) 

if [[ $VGA_CON -eq 0 && $HDMI_CON -eq 0 ]] 
then 
    echo "VGA CON, HDMI CON" 
elif [[ $VGA_CON -eq 0 && $HDMI_DIS -eq 0 ]] 
then 
    echo "VGA CON, HDMI DIS" 
elif [[ $VGA_DIS -eq 0 && $HDMI_CON -eq 0 ]] 
then 
    echo "VGA DIS, HDMI CON" 
else 
    echo "VGA DIS, HDMI DIS." 
fi 

이 (하지를 들어, 1을 발견하기위한 0) GREP의 결과 코드와 같은 그 변수를 설정 : 더 나은 옵션은 무언가 같이 일 수 있습니다. 출력에 대한 동일한 기본 로직을 제자리에두고 있지만, 이는 xrandr 출력에 따라 향상 될 수 있습니다.