Ber*_*ala 7 linux bash command-line
bash 是否提供了将上一个命令的最后一个输出行插入命令行的方法?
例如,假设我刚刚运行ls -1并且输出是
file1
file2
file3
Run Code Online (Sandbox Code Playgroud)
是否有可以file3在光标位置插入文本的组合键?
(类似于Alt+ .,它插入上一个命令的最后一个参数,但在这里我想粘贴输出,而不是命令本身。)
这是一个不完整的解决方案。我认为它或多或少可以发挥作用。
首先,我们安排通过在script环境中运行来捕获所有键盘输出。(这有很多问题;见下文。)我们需要传递标志-f,script以便它立即将输出刷新到打字稿文件。我们还选择一个文件名/tmp:
script -f /tmp/typescript
Run Code Online (Sandbox Code Playgroud)
在脚本化环境中,我们定义一个键盘快捷键来提取打字稿文件的最后一行并将其推送到历史记录中:(我将命令绑定到Ctl+yCtl+y假设您不经常键入。bash 中的错误阻止了Fn例如,您可以将命令绑定到长度超过两个字节的序列,这样就消除了所有键。)
bind -x '"\C-y\C-y":history -s $(tail -n2 X|head -n1)'
Run Code Online (Sandbox Code Playgroud)
现在,要将最后一行输出插入到当前命令行中,我们“只”需要键入ctl-y ctl-y ! ! esc ^将最后一行输出复制到历史记录中,然后插入历史扩展,然后触发历史扩展。可能有更好的方法可以做到这一点,但这种方法确实有效。不过,按键次数很多,因此我们将其分配给键盘宏:
bind '"\eOP":"\C-y\C-y!!\e^"'
Run Code Online (Sandbox Code Playgroud)
在某种程度上,这是可行的。然而,现在我们需要处理 VT-102 控制代码等的丑陋问题,它精确地script保存了生成的输出。它会准确地保存您输入的内容,包括您退格的所有错误、退格键和新字符。它保存在每行末尾发送的回车符 ( )。简而言之,它并不是您想要插入到命令行中的真正文本。ctl-m
但从概念上讲,它是有效的。它所需要的只是一个更好的工具来保存会话输出,也许还有一种更优雅的方式来插入调用 shell 命令的结果,而不是将其推入历史记录,然后再次将其取出。
| 归档时间: |
|
| 查看次数: |
2665 次 |
| 最近记录: |