在提示符后面打印bash脚本结果并在下一行显示

9

我有一个Bash脚本,它会返回一个命令。我想执行这个脚本,并让它自动将结果打印在下一行的提示符后面。如果可以替换当前行中的脚本调用,那也是一个选择。这样我就可以在执行之前编辑命令。
这是否可以在Bash终端中实现?


2
作为一种更易于实现的替代行为,您可以打开一个包含命令的编辑器,然后对编辑后的文件进行源代码处理:trap 'rm -f -- "$cmd_file"' EXIT; cmd_file=$(mktemp); printf %s\\n "$command" >"$cmd_file"; ${EDITOR:-nano} -- "$cmd_file" && (. "$cmd_file") - user3035772
2
@user3035772 好主意!不过应该是 ${EDITOR:-vim} ;D - hek2mgl
相关:https://dev59.com/mm435IYBdhLWcg3whAWx - Oleg Andriyanov
1
@hek2mgl 我是vim的粉丝,但在这种情况下,我认为nano的键映射更像bash的默认键映射。 - user3035772
好的,有终端转义序列漏洞你可以尝试利用,但这些最多只是高度不可移植的。 - 200_success
2个回答

4
如果您在tmux(终端多路复用器)中运行bash,您可以使用其缓冲区功能将命令粘贴到提示符中。然后,您可以在运行命令之前编辑它。以下是一个简单的示例:
#!/bin/bash
tmux set-buffer 'ls -l'
tmux paste-buffer &

将粘贴缓冲区命令放在后台,让bash在粘贴之前输出提示符。如果粘贴速度过快,可以添加一个亚秒级别的延迟,如下所示:
#!/bin/bash
tmux set-buffer 'ls -l'
{ sleep .25; tmux paste-buffer; } &

这实际上相当棒,但我想知道是否有一种使用bash/zsh/任何本地终端功能来实现相同效果的方法? - undefined

0

除了user3035772的评论中提供的“使用临时文件”选项之外,另一个选项是使用shell的历史记录。

假设创建输出的命令是shell命令(或者您可以确定其输出是以后要运行的命令),则可以使用history -s将命令存储在历史记录中,然后在命令行上调用它以编辑它(或使用fc来这样做)。

history -s 'echo whatever you "want your" command to be'

然后使用fc在您的$EDITOR中进行编辑,或按上箭头或Ctrl-p将历史记录加载到当前输入行中。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接