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

use*_*630 5 linux shell bash ubuntu shell-script

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

#!/bin/bash
while true; do
    read -rep $'\n '"$USER"'> ' userInput
    echo "$userInput"
done
Run Code Online (Sandbox Code Playgroud)

例子:

./input.sh 

 username> command1
command1

 username> command2
command2
Run Code Online (Sandbox Code Playgroud)

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

Kus*_*nda 8

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

您将rlwrap在脚本本身上使用:

rlwrap -a ./script.sh
Run Code Online (Sandbox Code Playgroud)

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

参见手册rlwrap

rlwrap在大多数 Unices 上通常作为一个包提供,但也可以从其 GitHub 存储库中获得