Следующий код bash хорошо работает, чтобы получить и отобразить разрешение экрана x и y, не видя xrandr:
Вы можете получить текущее разрешение экрана следующим образом:
Получить разрешение X запустив:
X=$(xrandr --current | grep '*' | uniq | awk '{print $1}' | cut -d 'x' -f1)
Получите разрешение Y, запустив:
Y=$(xrandr --current | grep '*' | uniq | awk '{print $1}' | cut -d 'x' -f2)
Выведите разрешение X и Y, запустив:
echo "$X"x"$Y"
или
echo "$X"
echo "$Y"
Как изменить этот код, чтобы получить разрешение экрана в ubuntu, все еще не видя xrandr, a без использования awk?
Во-первых, действительно нет причин удалять awk
. Он очень быстрый, стабильный и предназначен для подобных задач. Однако ваша команда излишне сложна. Вы можете просто:
$ xrandr --current | awk '$2~/\*/{print $1}'
2560x1440
Если вам действительно нужны x и y по отдельности, выполните:
x=$(xrandr --current | awk '$2~/\*/{print $1}' | cut -d'x' -f1)
y=$(xrandr --current | awk '$2~/\*/{print $1}' | cut -d'x' -f2)
echo "$x"
echo "$y"
Или, проще:
$ read x y < <(xrandr --current | awk '$2~/\*/{sub(/x/," ");print $1,$2}')
$ echo "x:$x y:$y"
x:2560 y:1440
И если вы настаиваете на том, чтобы не использовать awk, вот еще несколько вариантов:
read x y < <(xrandr --current | sed -En '/\*/{s/^ *([0-9]+)x([0-9]+).*/\1 \2/p}')
echo "$x"
echo "$y"
или
read x y < <(xrandr --current | perl -lne 'print "$1 $2" if /^ *([0-9]+)x([0-9]+).*/')
echo "$x"
echo "$y"
или
read x y < <(xrandr --current | grep -oP '\d+x\d+' | tr x ' ')
echo "$x"
echo "$y"
Обратите внимание, что все они предполагают, что подключен только один экран, как и ваш исходный подход.
Вы можете использовать бинарный оператор и читать
:
[[ $(xrandr --current) \
=~ current\ ([0-9]+)\ x\ ([0-9]+) \
]] && read x y <<< "${BASH_REMATCH[@]:1:2}"
echo ${x}x${y}
Второй вариант создает список шагов с текущими режимами.
#!/bin/bash
a=()
while read -r; do
[[ $REPLY \
=~ \ +([0-9]+)x([0-9]+)\ +[0-9.]+\* ]] && a+=(${BASH_REMATCH[@]:1:2})
done < <(xrandr --current)
# print the first resolution.
read x y <<< ${a[@]::2} && echo ${x}x${y}