使用zsh在脚本中创建命令行但不执行

5

我在想是否有可能编写一个zsh脚本,将命令写入提示符但不执行它,即在我准备好编辑并执行它之前将其留下。通过去掉最后的'\C-m',我可以使用键绑定来实现这样的事情,例如:

bindkey -s "\e[1;3C" "howdy!"

我按下Alt+RightArrow键,文本“howdy!”被打印在提示符上并保留在那里。
我也可以通过将我的命令写入历史文件,然后使用向上箭头回忆它来实现我想要的功能。我尝试过'echo -n sometext',但它不起作用。
我能否编写一个脚本,在退出时保留(比如)“ howdy! ”在命令行上?实际上,我希望脚本基于几个因素构建一个复杂的命令,但我希望脚本将其保留在CLI上以进行最终编辑,因此必须防止自动执行。
提前致谢。
2个回答

7
结果证明答案很简单:
print -z $string-to-print

2

如果你指的是一个zsh函数而不是外部脚本,那么你可以编写一个zle(zsh行编辑器的简称)小部件并将其绑定到某个键。

# define to function to use
hello () {
 BUFFER=hello
 zle end-of-line
}
# create a zle widget, which will invoke the function.
zle -N hello
# bindkey Alt-a to that widget
bindkey "\ea" hello

你可以从《Z-Shell用户指南》第四章中了解更多相关的IT技术内容。

zle:找不到函数定义文件 zle:只有在ZLE处于活动状态时才能调用小部件 - Ray Andrews
lilydjwg,谢谢。你的帖子提供了一些有价值的信息,并且正如你所建议的那样绑定了关键字。但是,它仍然没有帮助我创建一个脚本,在退出时会在命令行上留下一些东西。我认为上面的“hello”函数看起来很有前途,尝试着去玩弄它,但我无法让它从命令行自己运行。在我的.zshrc中使用“autoload -U zle”,我得到:zle: function definition file not found...在我的.zshrc未修改的情况下,我得到:zle: widgets can only be called when ZLE is active。我知道我还有很多要读的:( - Ray Andrews
@rayandrews:你是如何调用导致出现这个错误的zle命令的? - lilydjwg
我在CLI上刚刚输入了“hello”、“zle hello”和其他一些内容,但都遇到了错误。但是我对这个“zle”一无所知,只是希望能得到最好的结果。不管怎样,似乎有一个非常简单的解决方案可以解决我的问题:“print -z $the-command-string”正是我想要的。 - Ray Andrews

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