Bash:如何配置键盘快捷键来运行程序并将其输出插入光标位置?

Bash:如何配置键盘快捷键来运行程序并将其输出插入光标位置?,bash,bash-completion,Bash,Bash Completion,在Bash中键入命令时,我希望能够按组合键来运行程序,并将程序的输出插入光标位置的命令行。 例如: $ cat <Ctrl-G> # bash runs a program that prints "some-file" to stdout $ cat some-file 但“某些文件”打印到终端,而不是命令行: $ cat <Ctrl-G> some-file $ cat $cat 一些文件 $cat 我有Lubuntu和so X windows、OpenBox,

在Bash中键入命令时,我希望能够按组合键来运行程序,并将程序的输出插入光标位置的命令行。 例如:

$ cat <Ctrl-G>
# bash runs a program that prints "some-file" to stdout
$ cat some-file
但“某些文件”打印到终端,而不是命令行:

$ cat <Ctrl-G>
some-file
$ cat 
$cat
一些文件
$cat

我有Lubuntu和so X windows、OpenBox,我通过在OpenBox中定义快捷方式来解决这个问题

nano ~/.config/openbox/lubuntu-rc.xml
#setting shortcuts to point at a special bash script
openbox --reconfigure # restart shortcuts
所以如果我在任何地方按ctrl+G,它就会运行给定的脚本 将结果输出到剪贴板,例如:

 echo "Hello World at $(date +%Y-%m-%d_%H-%M-%S)" | xsel -b -i 
然后我将输出粘贴到Bash终端(ctrl+shift+V)

我知道这不是纯粹的狂欢,但它可能会在某种程度上帮助你


注:如果我需要直接向应用程序发送密钥,我使用xdool

我有Lubuntu和so X windows、OpenBox,我通过在OpenBox中定义快捷方式来解决这个问题

nano ~/.config/openbox/lubuntu-rc.xml
#setting shortcuts to point at a special bash script
openbox --reconfigure # restart shortcuts
所以如果我在任何地方按ctrl+G,它就会运行给定的脚本 将结果输出到剪贴板,例如:

 echo "Hello World at $(date +%Y-%m-%d_%H-%M-%S)" | xsel -b -i 
然后我将输出粘贴到Bash终端(ctrl+shift+V)

我知道这不是纯粹的狂欢,但它可能会在某种程度上帮助你


注:如果我需要直接向应用程序发送密钥,我使用xdool

答案在于
READLINE\u LINE
READLINE\u POINT
变量设置:

-x keyseq:shell命令

使shell命令在输入keyseq时执行。执行shell命令时,shell将READLINE_LINE变量设置为READLINE LINE缓冲区的内容,将READLINE_POINT变量设置为插入点的当前位置。如果执行的命令更改了READLINE\u LINE或READLINE\u POINT的值,则这些新值将反映在编辑状态中

例如:

stuff() { 
    local pre="${READLINE_LINE:0:$READLINE_POINT}"
    local suf="${READLINE_LINE:$READLINE_POINT}"
    local stuff='my string here'
    READLINE_LINE="${pre}$stuff$suf"
    ((READLINE_POINT += ${#stuff}))
}

bind -x '"\C-g":"stuff;"'

Greg Wooledge回答了我在

中的问题。答案在于
READLINE\u LINE
READLINE\u POINT
变量设置:

-x keyseq:shell命令

使shell命令在输入keyseq时执行。执行shell命令时,shell将READLINE_LINE变量设置为READLINE LINE缓冲区的内容,将READLINE_POINT变量设置为插入点的当前位置。如果执行的命令更改了READLINE\u LINE或READLINE\u POINT的值,则这些新值将反映在编辑状态中

例如:

stuff() { 
    local pre="${READLINE_LINE:0:$READLINE_POINT}"
    local suf="${READLINE_LINE:$READLINE_POINT}"
    local stuff='my string here'
    READLINE_LINE="${pre}$stuff$suf"
    ((READLINE_POINT += ${#stuff}))
}

bind -x '"\C-g":"stuff;"'

感谢Greg Wooledge,他在

中回答了我的问题。$(…)对你有用吗,就像
cat$(一些程序)
?好主意,但这样做的目的是让生活更轻松:通过运行Ctrl-G启动程序对我来说至关重要。
$(…)
对你有用吗,就像
cat$(一些程序)一样
?好主意,但这样做的目的是让生活更轻松:程序是通过运行Ctrl-G启动的,这一事实对我来说至关重要。