BASH:如何在 while 循环中查看命令历史记录?

BASH:如何在 while 循环中查看命令历史记录?

我有一个简单的 while 循环接受输入:

#!/bin/bash
while true; do
    read -rep $'\n '"$USER"'> ' userInput
    echo "$userInput"
done

例子:

./input.sh 

 username> command1
command1

 username> command2
command2

是否可以有命令历史记录?这样我就可以按下键盘来查看之前执行的命令(不离开 while 循环)?

答案1

您可以使用小型 Readline 包装器rlwrap。这是一个简洁的小工具,可为那些本身不实现它的实用程序提供命令历史记录。

您可以rlwrap在脚本本身上使用:

rlwrap -a ./script.sh

这将保存一个名为 的历史记录文件~/.script.sh_history,并且不仅在当前会话中使用该文件,而且还在未来的会话中使用该文件来提供您可以单步执行的历史记录。

请参阅手册rlwrap

rlwrap在大多数 Unices 上通常以软件包的形式提供,但也可以从它的 GitHub 存储库

答案2

您可以使用history -s编辑历史列表,并read -e可以查看历史记录。

#!/bin/bash
while true; do
    read -rep $'\n '"$USER"'> ' userInput
    history -s "$userInput"
    echo "$userInput"
done

请注意,关于命令历史记录有多种选项。脚本和交互式 shell 之间的行为可能非常不同。例如,命令历史记录不会自动从脚本中的文件加载或保存到文件中,这在您的情况下可能需要也可能不需要。但如果没有,您可以通过添加更多代码来修复它。

相关内容