我想在 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"')