2016-11-11 98 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输出的结果。