Рейтинг:0

Как изменить код bash, чтобы получить разрешение экрана на Ubuntu с помощью xrandr, но без использования awk?

флаг ng

Следующий код 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, запустив:

эхо "$X"x"$Y"

или же

эхо "$X"
эхо "$Y"

Как изменить этот код, чтобы получить разрешение экрана в Ubuntu, по-прежнему не видя xrandr, без использования awk?

флаг hr
ИМХО, было бы разумнее сохранить awk и потерять другие команды, например. `awk '/\*/{split($1,a,"x"); напечатать [2]; выход}'`
Eddy763 avatar
флаг ng
awk доступен не во всех системах...
muru avatar
флаг us
В каких системах Ubuntu он недоступен? Даже `ubuntu-minimal` зависит от этого. Он есть в стандартных образах Ubuntu Docker, которые также довольно минимальны.
Рейтинг:4
флаг cn

Во-первых, нет причин удалять аук. Он очень быстрый, стабильный и создан для таких вещей. Однако ваша команда излишне сложна. Вы можете просто сделать:

$ xrandr --текущий | awk '$2~/\*/{напечатать $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)
эхо "$x"
эхо "$y"

Или, проще говоря:

$ read x y < <(xrandr --current | awk '$2~/\*/{sub(/x/," ");print $1,$2}')
$ эхо "х:$х у:$у"
х: 2560 г: 1440

И если вы настаиваете на том, чтобы не использовать awk, вот несколько других вариантов:

читать x y < <(xrandr --current | sed -En '/\*/{s/^ *([0-9]+)x([0-9]+).*/\1 \2/p} ')
эхо "$x"
эхо "$y"

или же

read x y < <(xrandr --current | perl -lne 'print "$1 $2" if /^ *([0-9]+)x([0-9]+).*/')
эхо "$x"
эхо "$y"

или же

читать x y < <(xrandr --current | grep -oP '\d+x\d+' | tr x ' ')
эхо "$x"
эхо "$y"

Обратите внимание, что все они предполагают, что подключен только один экран, как и ваш первоначальный подход.

terdon avatar
флаг cn
@Eddy763 Eddy763 не беспокойтесь об этом :) Однако, если один из приведенных здесь ответов решил вашу проблему, найдите время и [примите его](//askubuntu.com/help/someone-answers), нажав на галочку слева. Это лучший способ выразить благодарность на сайтах Stack Exchange.
флаг hr
Другая опция, основанная на `чтении`, может быть чем-то вроде `IFS=' x' read x y _
terdon avatar
флаг cn
@ Эдди763 здорово! Я как бы предполагал, что это подразумевается, и не хотел повторять это для каждого решения.
Рейтинг:2
флаг cn

Вы можете использовать бинарный оператор и читать:

[[ $(xrandr --current) \
    =~ текущий\([0-9]+)\х\([0-9]+)\
]] && читать x y <<< "${BASH_REMATCH[@]:1:2}"

эхо ${x}x${y}

Второй вариант создает список шагов с текущими режимами.

#!/бин/баш

а=()
при чтении -r; делать
    [[ $ ОТВЕТ \
    =~ \ +([0-9]+)x([0-9]+)\ +[0-9.]+\* ]] && a+=(${BASH_REMATCH[@]:1:2})
сделано < <(xrandr --current)

# напечатать первое разрешение.
читать x y <<< ${a[@]::2} && echo ${x}x${y}

Ответить или комментировать

Большинство людей не понимают, что склонность к познанию нового открывает путь к обучению и улучшает межличностные связи. В исследованиях Элисон, например, хотя люди могли точно вспомнить, сколько вопросов было задано в их разговорах, они не чувствовали интуитивно связи между вопросами и симпатиями. В четырех исследованиях, в которых участники сами участвовали в разговорах или читали стенограммы чужих разговоров, люди, как правило, не осознавали, что задаваемый вопрос повлияет — или повлиял — на уровень дружбы между собеседниками.