我的目标是使用 bash 脚本的输出,使用系统定义的快捷键将结果字符串插入文本文件中。
该脚本(见下文)在终端中运行良好。但是当我从快捷键触发它时(我使用的是:super++ alt,u以防万一),我没有从脚本中得到任何“输出”。编辑器(例如,gedit)似乎“闪烁”,但什么也没发生。我猜脚本正在运行,但我没有正确“完成”脚本以供此用途(?)。
这是脚本:它获取一个 unix 时间戳(输出date +%s
),将其转换为 base62,然后返回结果字符串的最后四个字符。(对于好奇的人,我使用它来为“Markdown”文本中的脚注生成合理的锚点。)
#!/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。)
答案1
将原有的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
仅用于测试脚本。可以选择将其删除。
答案2
我从中找到了帮助Unix操作系统,并将其稍微延迟地合并到脚本中(也许我需要一个更快的例程!)给了我将该脚本的结果输入到活动窗口所需的结果:
#!/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"
与原始帖子的更改均在最后三行,如下所示:
- 将所需的字符串捕获到变量中;
- 获取当前窗口的ID;
- 让脚本运行并将输出字符串“输入”到当前窗口中。
我特别喜欢它不需要弄乱中间文件,或者以任何方式使用剪贴板。