В зависимости от дистрибутива для раскладок клавиатуры команда
loadkeys <path/to/file>
loadkey /lib/kbd/keymaps/i386/qwerty/pt_PT.map.gz
Если я помню правильно. Также проверьте страницу справочника на loadkeys, если Вы хотите присвоить определенные ключи к определенному поведению.
Я бы хотел найти обычный шаблон для включения в скрипт оболочки, так что что n переменных будут содержать n аргументов
Далее создается shell-массив arglist
, который содержит каждый из аргументов:
$ readarray -t arglist < <(echo "\command{arg1,
arg2 ,
arg3
}" | sed -n '/\\command/{ :a;/}/!{N;b a}; s/\\command{//; s/[ \n}]//g; s/,/\n/g; p}')
Используя утверждение declare
, мы видим, что это сработало:
$ declare -p arglist
declare -a arglist='([0]="arg1" [1]="arg2" [2]="arg3")'
Вот еще один пример с аргументами в одной строке:
$ readarray -t arglist < <(echo "\command{arg1, arg2, arg3, arg4}" | sed -n '/\\command/{ :a;/}/!{N;b a}; s/\\command{//; s/[ \n}]//g; s/,/\n/g; p}')
Снова работает:
$ declare -p arglist
declare -a arglist='([0]="arg1" [1]="arg2" [2]="arg3" [3]="arg4")'
Обратите внимание, что пробел в < <(
является существенным. Мы перенаправляем входные данные из подстановки процесса. Без пробела, bash
попробует что-то совершенно другое.
Команда sed
немного неуловима. Давайте посмотрим на нее по кусочку за раз:
-n
Не печатать строки, если не задан явный вопрос.
/\\command/{...}
Если мы находим строку, содержащую \command
, то выполняем следующие команды в фигурных скобках:
:a;/}/!{N;b a}
Это считывание строк в буфер паттерна до тех пор, пока мы не найдем строку, содержащую }
. Таким образом, мы получаем всю команду сразу.
s/\\command{//
Удалить строку \command{
.
s/[ \n}]//g
Удалить все пробелы, закрывающие скобки и новые строки.
s/,/\n/g
Замените запятые на новые строки. Когда это сделано, каждый аргумент находится в отдельной строке, что и нужно readarray
.
p
Печать.
С Perl
:
perl -l -0777 -ne '
$n = 0;
for (/\\command\{\s*(.*?)\s*\}/sg) {
$n++;
$i = 0;
for $arg (split /\s*,\s*/, $_) {
$arg =~ s/'\''/$&\\$&$&/g;
print "arg${n}[$i]='\''$arg'\''";
$i++;
}
}
print "n=$n"' the-file
выводят что-то вроде:
arg1[0]='arg1'
arg1[1]='arg2'
arg1[2]='arg3'
n=1
, который вы могли бы оценить как:
eval "$(perl ...)"
Для создания $ arg1
, $ arg2
... Массивы для каждого из \ команду
s.