LINUX.ORG.RU

То ли лыжи не едут, то ли я не понимаю...

 


0

1

Есть скрипт, который выводит текущую раскладку:

killall kbdd 2>/dev/null
kbdd >/dev/null || exit 1

N=$( dbus-send --print-reply=literal --dest=ru.gentoo.KbddService\
    /ru/gentoo/KbddService ru.gentoo.kbdd.getCurrentLayout 2>/dev/null |\
    sed -un 's/^.*uint32 //p' )
LAYOUT=$( dbus-send --print-reply=literal --dest=ru.gentoo.KbddService \
    /ru/gentoo/KbddService ru.gentoo.kbdd.getLayoutName uint32:$N )

echo $LAYOUT
echo "------"

if [[ $LAYOUT = "English (US)" ]]; then
  echo "АНГ"
  echo "АНГ"
  echo ""
else
  echo "РУС"
  echo "РУС"
  echo ""
fi

И есть вывод этого скрипта:

English (US)
------
РУС

И кроме этого, есть жесткое непонимание почему так происходит. Почему ему не нравится проверка?

Ответ на: комментарий от RazrFalcon

$LAYOUT в условии нужно в кавычки обернуть. Или вы не в курсе что баш наркоманский?

Нужно, только проблема не в этом. Ты сам не в курсе наркомании баша.

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

Анонимус одобряет совет этого благородного дона.

anonymous
()

Почему ему не нравится проверка?

echo "-${LAYOUT}-"
echo "------"
Deleted
()
Ответ на: комментарий от anonymous

$LAYOUT в условии нужно в кавычки обернуть. Или вы не в курсе что баш наркоманский?

Нужно,

В «условии» в левой части [[ — не нужно.

Ты сам не в курсе наркомании баша.

Вот кто бы говорил.

vodz ★★★★★
()

Но мне интересней другое, что за нахрен делает та часть скрипта, которая сначала убивает некий kbdd, потом вызывает его снова, а затем запрашивает непонятную фиговину через dbus? Неужели нельзя узнать раскладку более простым способом?

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

Ох уж этот баш. Как можно было обосраться при проектировании такой примитивной конструкции как IF?

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

Так у них же [ это (был) отдельный внешний бинарь, шелл неуиновен и в штаны залили.

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

Да всё нормально с башем. Этот самый недостаток с кавычками является следствием его главных достоинств: простой работы с переменными, простоты освоения, отладки и написания скриптов.

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

Вся «простота освоения, работы отладки и написания» там заключается в непрерывном трахе со сплиттингом по пробелам и прочими аналогичными радостями.

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

Это всё внутри двойных кавычек, так что нет.

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

Не слышал о таких проблемах. Хотя скрипты пишу давно. А вот «нормальных» ЯП так и не освоил ни одного.

Дейкстра таки ошибся языком.

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

Но мне интересней другое, что за нахрен делает та часть скрипта, которая сначала убивает некий kbdd, потом вызывает его снова, а затем запрашивает непонятную фиговину через dbus? Неужели нельзя узнать раскладку более простым способом?

Можешь предложить свой вариант. Буду благодарен.

Для переключения использую:

setxkbmap us,ru -option grp:caps_toggle

Итоговый вариант:

killall kbdd 2>/dev/null
kbdd >/dev/null || exit 1

N=$( dbus-send --print-reply=literal --dest=ru.gentoo.KbddService\
    /ru/gentoo/KbddService ru.gentoo.kbdd.getCurrentLayout 2>/dev/null |\
    sed -un 's/^.*uint32 //p' )
LAYOUT=$( dbus-send --print-reply=literal --dest=ru.gentoo.KbddService \
    /ru/gentoo/KbddService ru.gentoo.kbdd.getLayoutName uint32:$N )

if [[ $LAYOUT = "   English (US)" ]]; then
  echo "АНГ"
else
  echo "РУС"
fi
Нужен для вывода в i3blocks. Interval=once. К капсу привязан pkill -RTMIN+.

Ресурсы не жрет, но это лютый костыль, признаю.

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

Узнать текущую раскладку клавиатуры. (комментарий)

Вот нашёл. Тоже костыль, но по крайней мере понятно что оно делает. Очевидно не будет работать если лампочка на клавиатуре окажется как то нестандартно настроена.

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

Спасибо! Тоже работает. Если сравнить два метода, твой и который предложил zvezdochiot, какой из них будет лучше?

P.S странный вопрос, но стараюсь собрать себе грамотное окружение)

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

хз какой. для одного нужно програмку собрать, а второй работает по косвенному признаку - проверяет лампочку на клаве (зато обходится стандартными утилитами)

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