Isso deve funcionar:
xrandr --listactivemonitors | grep <BBB> >/dev/null && xrandr --output <BBB> --off || xrandr --output <BBB> --right-of <AAA> --mode 1920x1080
Explicação:
-
xrandr --listactivemonitors
imprime somente os monitores que estão atualmente ativados. -
grep <BBB> >/dev/null
Pesquisa a saída anterior para o nome do monitor que queremos alternar. Se for encontrado, o grep retornará um código de saída que o shell interpreta como true. Se não for encontrado, retornará um código de saída que o shell interpreta como falso. A saída é enviada para / dev / null para evitar a confusão na tela. -
&& xrandr --output <BBB> --off
Se o grep encontrou o monitor na lista de monitores ativos, ele será executado, desligando o monitor. Mas se grep sair com um código de saída falsey, então isso não será executado porque não importa o que ele avalie, a lógica e a cláusula como um todo já são conhecidas como falsas. -
|| xrandr --output <BBB> --right-of <AAA> --mode 1920x1080
Se o grep não o encontrou, esta cláusula será executada, ligando o monitor. Ele é executado porque a cláusula anterior (grep ... && xrandr ...
) foi avaliada como falsa. Para saber se essa lógica ou cláusula é verdadeira, o shell deve avaliar o lado direito. Por outro lado, se o canhoto esquerdo já foi avaliado como verdadeiro, não há necessidade de avaliar o lado direito e, portanto, isso não será executado.
Aqui está um resumo sucinto sobre fluxo de controle mediado por condicionais lógicos.