如何回显(a (executable-)string)
提示以使光标位于行尾?
这样我就可以点击Enter执行或Ctrl-C扔掉该行。
这有可能吗?
我知道(交互式)bash 脚本可能会更好,但我想保持简单。
例子:
echo_to_prompt "rm -R ./tmp/logs/delete_me_every_once_in_a_while/"
会导致:
user@machine:~$ rm -R ./tmp/logs/delete_me_every_once_in_a_while/[CURSOR]
答案1
如果您需要在 shell 脚本或普通命令行中使用 echo_to_prompt() 命令,您可以简单地使用read
:
#!/bin/sh
echo_to_prompt() {
echo -n "$USER@$HOSTNAME:$PWD $" $@
read && $@
}
echo_to_prompt rm -R ./tmp/logs/delete_me_every_once_in_a_while/
如果您希望在命令行上使用,可以将 echo_to_prompt() 函数添加到 .bashrc/.profile/... 中。
答案2
有几个控制序列您可以将其发送到终端,它会模拟一些输入。但是,您无法直接模拟任何输入:这不会特别有用,并且在显示包含控制字符的文件时生成任意输入将是危险的。
大多数此类控制序列(设备状态报告、鼠标位置报告等)都会发回控制序列,如果键入这些控制序列,这些控制序列是无害的。一些传统终端(包括旧版本的 xterm)有一个控制序列来发送回窗口标题,可以通过另一个控制序列设置,但现代终端忽略此命令。
长话短说,这是不可能的,恰恰是为了避免你想要做的事情。
答案3
使用 zsh。
zle-line-init() {
((SECONDS - last < 300)) && return
LBUFFER="rm -R ./... "
last=$SECONDS
zle -R
}
zle -N zle-line-init
((最多)每 5 分钟执行一次)。
不过,我不喜欢命令突然出现在我的提示中。