Моя цель состоит в том, чтобы использовать вывод сценария удара для вставки получившей строки в текстовый файл с помощью определенного системой сочетания клавиш.
Сценарий (см. ниже) работает просто великолепно в терминале. Но когда я инициировал его от своего сочетания клавиш (я использую: супер + высокий звук + u, в случае, если это имеет значение), я ничего не вывожу из сценария. Редактор (например, gedit), кажется, "мигает", но ничего не происходит. Я предполагаю, что сценарий работает, но что я не "заканчиваю" сценарий правильно для этого использования (?).
Это - сценарий: это берет метку времени Unix (вывод date +%s
), преобразовывает это в base62, затем возвращается, это длится четыре символа получившей строки. (Для любопытного я использую это для генерации разумных привязок для сносок в тексте "Скидки с цены".)
#!/bin/bash
# takes unix timestamp and converts to base62
# HT: https://stackoverflow.com/a/14472352/232251
function u2b {
v=$(date +%s)
BASE62=($(echo {0..9} {a..z} {A..Z}))
for i in $(bc <<< "obase=62; $v"); do echo -n ${BASE62[$(( 10#$i ))]}
done
}
r=$(u2b)
echo ${r: -4}
Я попробовал последнюю строку printf ${r: -4}
, но это не помогает.
Как я могу убедить этот сценарий/сочетание клавиш предоставить "вход" моему редактору? (Я использую ванильную последнюю Ubuntu, btw.)
Я нашел некоторую справку от Unix. SE и слияние, что в сценарий с небольшим количеством задержки (возможно, мне нужна более быстрая стандартная программа!) дает мне просто, результат должен был ввести результат этого сценария в активное окно:
#!/bin/bash
# takes unix timestamp and converts to base62
# HT: https://stackoverflow.com/a/14472352 | https://unix.stackexchange.com/a/393164
function u2b {
v=$(date +%s)
BASE62=($(echo {0..9} {a..z} {A..Z}))
for i in $(bc <<< "obase=62; $v"); do echo -n ${BASE62[$(( 10#$i ))]}
done
}
r=$(u2b)
o=$(echo ${r: -4})
windowid=$(xdotool getwindowfocus)
sleep 0.5 && xdotool windowactivate --sync $windowid type "$o"
Изменения из исходного сообщения все найдены в последних трех строках, как так:
Мне особенно нравится этот, это не должно смешивать с промежуточным файлом или использовать буфер обмена всегда.
Измените исходный сценарий bash следующим образом:
#!/bin/bash
# takes unix timestamp and converts to base62
# HT: https://stackoverflow.com/a/14472352/232251
function u2b {
v=$(date +%s)
BASE62=($(echo {0..9} {a..z} {A..Z}))
for i in $(bc <<< "obase=62; $v"); do echo -n ${BASE62[$(( 10#$i ))]}
done
}
r=$(u2b)
result=$(echo ${r: -4})
echo $result # for testing only, this line can be optionally deleted afterwards
gedit - <<< $result # redirect output into gedit
Вторая до последней строки с надписью echo $result
используется только для тестирования сценария. При желании его можно удалить.