2016-11-11 125 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 

這將等於grep的結果碼(0找到,1不)這些變量。我在輸出中保留了相同的基本邏輯,但這可能會增強,具體取決於xrandr輸出的結果。