2016-11-11 5 views
0

私は自分のラップトップに接続されている画面(2つのポートがある)に基づいて外部画面を切り替えることができるbashスクリプトを作成しようとしています。正直言って、私のbashの専門知識は限られているので、これは論理的なバッシュの誤りかもしれません。2画面トグル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の出力に応じて強化される可能性があります。

関連する問題