如何回显(a(executable-)string)到提示符,以便光标在行尾闪烁?

如何回显(a(executable-)string)到提示符,以便光标在行尾闪烁?

如何回显(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 分钟执行一次)。

不过,我不喜欢命令突然出现在我的提示中。

相关内容