对“read -e”(readline)使用单独的历史记录

对“read -e”(readline)使用单独的历史记录

我想在 shell 脚本中编写一个交互式命令 shell,以便更轻松地调整 iptables 防火墙。问题是,它read -e使用历史。有没有办法read -e在脚本中使用单独的历史记录?

答案1

如果你有rlwrap(debian 包rlwrap),那么你可以使用类似以下的东西:

LINE=$(rlwrap head -n1)

默认情况下将使用该文件~/.head_history。(man rlwrap有关更多详细信息,包括指定历史文件名的选项。)

read另一种可能性是在子 shell 中运行并HISTFILE设置为你自己的历史文件,但你需要做更多的工作,因为虽然read -e 用途历史记录,它不会更新它。因此你可能需要类似以下内容的东西:

LINE=$(bash -c 'HISTFILE=/path/to/history_file;
                history -r; read -e LINE;
                history -s "$LINE"; history -w;
                echo "$LINE"')

相关内容