【问题标题】:In a bash script, print command (as a suggestion) on the prompt after the script exit在 bash 脚本中,在脚本退出后的提示符处打印命令(作为建议)
【发布时间】:2016-02-11 20:23:52
【问题描述】:

我想编写一个 shell 脚本,它可以通过在命令行提示符后打印来建议命令。 然后,在脚本退出后,用户只需按 [enter] 键即可运行此建议的命令。

鉴于我是 bash 新手,我什至不知道是否可以这样做。我想过使用复制过去命令,移动光标,使用 $PS1 变量,但没有找到合适的方法..

有没有人知道如何实现这样的功能?

【问题讨论】:

  • 只是打印到标准输出然后让他们复制粘贴?在您退出之前询问他们是否要运行它,如果他们说是则为他们运行它?
  • 我认为这不可能。 readline 不提供以编程方式将文本添加到输入缓冲区的方法。
  • 可能可以使用 xte 之类的东西在后台运行延迟脚本的情况下输入终端,但这不是一个实用的解决方案,如果 shell 在脚本运行时失去焦点,(看似)随机按键将发生在新聚焦的窗口上。
  • 我刚刚测试过了。您可以使用 xte 将按键“模拟”到 shell 中,因此可以将此功能构建到 bash 脚本中,它只是有问题并且可能是零星的。这是我的快速测试的 sn-p:(在 cmets 中格式化。)01:43 PM lando ~ xte 'key v'; xte 'key i'; xte 'key m' vim01:43 PM lando ~ vim
  • @Landen 感谢您的建议,我已经能够获得所需的行为!

标签: linux bash command-line prompt


【解决方案1】:

根据 cmets 中 Landen 的建议(非常感谢!),我已经能够为我的问题找到解决方法。

此解决方法需要 xautomation 包(xte 命令,模拟按下的键),不是很健壮,并且可能取决于 xautomation 的键盘布局处理和系统快捷键。例如,我必须更改统一 HUD 的快捷方式。

但鉴于我的命令非常快,而且主要是供个人使用,这个解决方案完全符合我的需求:

COMMAND_PASSED='sudo apt-get update'

# Displays the content of $COMMAND_PASSED on the next prompt
xte "str $COMMAND_PASSED"
sleep 0.1
tput cub ${#COMMAND_PASSED}

需要sleep 0.1tput cub ${#COMMAND_PASSED}命令来防止在命令提示符之前也显示键。

sleep 0.1 使整个命令在提示之前打印。

tput cub ${#COMMAND_PASSED} 向后移动光标以确保删除所有不必要的打印。

谢谢大家!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-04
    • 1970-01-01
    • 2019-03-17
    相关资源
    最近更新 更多