Два экрана переключения Xrandr

Я пытаюсь создать скрипт bash, который позволяет мне переключать внешние экраны в зависимости от того, какие экраны подключены к моему ноутбуку (у меня есть два порта). Если честно, мой опыт в bash ограничен, так что это также может быть логичной ошибкой bash. У меня есть следующий скрипт:

#!/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 выходы.

Другие вопросы по тегам