LINUX.ORG.RU

bash перемення из команды

 


0

2

Нужно отправить разрешние на нужный --output.

xrandr --output DVI-I-0 --mode 1280x1024

Но как узнать, какой connected? В терминале у меня получается получить командой:

xrandr | grep -w connected  | awk -F'[ ]' '{print $1}'
Но в скрипте не получается получить даже вывод:
echo xrandr | grep -w connected  | awk -F'[ ]' '{print $1}';

Как сделать

xrandr --output $CONNECTED_OUTPUT --mode 1280x1024

★★

echo $(сюда пишешь команду)

imul ★★★★★
()

а нафейхуа тут эхо?

JK
()

bash
echo
;

похапе тег забыл )

JK
()

Трубы, эхо -- не нужно так-то

re='(\S+) connected'
[[ $(xrandr) =~ $re ]] && echo ${BASH_REMATCH[1]}


В =~ в rhs какой-то нескучный квотинг, я не знаю как сделать в одну строчку.

d_a ★★★★★
()
Ответ на: комментарий от sand_circle

Ээ, право я даже не знаю, с чего там начать, там вроде очевидно всё.

У [[ есть тест с использованием extended regular expressions (=~), если совпадение есть, то вычисляется всё справа от && и печатает элемент встроенного read-only массива BASH_REMATCH по индексу 1 (это такой в bash аналог backreference \1). Вызов xrandr помещён в конструкцию $(), это command substitution -- выполнить команду и взять stdout от неё. Внутри [[ и lhs, и rhs вычисляются по правилам для кейвордов, а не для команд, поэтому дополнительный квотинг ("") отсутствует. Само регулярное выражение означает один или более непробельных символов, потом connected через пробел, и вынесено в отдельный параметр, так как я не осилил затолкать его inline (в GNU тоже не осилили, врочем, и поэтому в документации рекомендуют делать rhs в =~ параметром).

d_a ★★★★★
()
Последнее исправление: d_a (всего исправлений: 2)
Ответ на: комментарий от d_a

Интересовали =~ и BASH_REMATCH. Теперь я точно ничего не понял. :) Я напишу, что осознал, поправьте где ошибусь, пожалуйста.

Переменная re - регексп, выцепляющий совпадение connected

Если в выхлопе xrandr оно есть, то выводится второе совпадение, так?

Вот таки вопросы:
1. Где читать, чтоб понять конструкцию «\S+»?
2. Что такое «=~» ?
3. Что именно внутри массива BASH_REMATCH?
4. Что такое rhs?

sand_circle
()
Ответ на: комментарий от sand_circle

Переменная re - регексп, выцепляющий совпадение connected

Выцепляется не connected, а слово, стоящее прямо перед connected.

Если в выхлопе xrandr оно есть, то выводится второе совпадение, так?

Нет, первое. Backreference (то, что в круглых скобочках) традиционно с 1 начинаются. Вообще, содержимое BASH_REMATCH после совпадения задокументировано тута https://www.gnu.org/software/bash/manual/html_node/Bash-Variables.html (проскролльте).

А вообще вы знаете, наверное, проще будет если вы прочитаете польностью http://mywiki.wooledge.org/BashGuide/TestsAndConditionals и http://mywiki.wooledge.org/BashGuide/Patterns, и когда прочитаете основной текст, аккуратно начинайте переходить по ссылкам оттуда (ссылки оттуда хорошие, либо на официальные доки GNU, либо на официальные доки POSIX). А ещё лучше вообще весь их http://mywiki.wooledge.org/BashGuide целиком.

rhs (right hand side) -- это мой эвфемизм "то что справа", lhs соответственно слева.

d_a ★★★★★
()
Последнее исправление: d_a (всего исправлений: 1)

Можно еще через xargs дальше в трубу

xrandr | grep -w connected  | awk -F'[ ]' '{print $1}' | xargs -I {} xrandr --output {} --mode 1280x1024

TheAnonymous ★★★★★
()

кстати что за прикол использовать grep если и так используется awk? можно же совместить

Deleted
()
Ответ на: комментарий от d_a

Спасибо. Просто пишу на баше по надобности лет десять, но вглубь не залезал. Пролистал по диагонали bash scripting guide когда-то и с тех пор горожу кучу пайпов, как выше писали. Всегда хватало, но тут на элегантное решение наткнулся :)

sand_circle
()
Ответ на: комментарий от arson

1)Запусти под wine>1.4 игру на родных монитору резолюциях.
2)Измени резолюции в игре например на 800х600
3)Убей процес игры.
4) наслаждайся своим xrandr -s 1280x1024

abbat81 ★★
() автор топика
Ответ на: комментарий от abbat81

Запусти под wine>1.4 игру

Извини wine нет, пасьянс у меня и так запускается :)
А что изменилоcь в 1.4?

наслаждайся своим xrandr -s 1280x1024

У меня 1600х1200, это у тебя говно монитор :)

Учись описывать проблему правильно и прикладывать логи (используемый драйвер, количество мониторов, Xorg.0.log, xrandr --verbose до и после.

P.S. Поставь винду, не мучайся.

arson ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.