Вставить вывод сценария оболочки в текстовый редактор?

Моя цель состоит в том, чтобы использовать вывод сценария удара для вставки получившей строки в текстовый файл с помощью определенного системой сочетания клавиш.

Сценарий (см. ниже) работает просто великолепно в терминале. Но когда я инициировал его от своего сочетания клавиш (я использую: супер + высокий звук + 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.)

1
задан 30 January 2018 в 16:23

2 ответа

Я нашел некоторую справку от 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"

Изменения из исходного сообщения все найдены в последних трех строках, как так:

  • получите желаемую строку к переменной;
  • захватите идентификатор текущего окна;
  • позвольте запущенному скрипту и "введите" выходную строку в текущее окно.

Мне особенно нравится этот, это не должно смешивать с промежуточным файлом или использовать буфер обмена всегда.

0
ответ дан 7 December 2019 в 15:24

Измените исходный сценарий 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 используется только для тестирования сценария. При желании его можно удалить.

1
ответ дан 7 December 2019 в 15:24

Другие вопросы по тегам:

Похожие вопросы: