有没有像猫这样有历史的东西?

有没有像猫这样有历史的东西?

它是关于一个迭代工作的程序 - 从标准输入获取输入并将结果传递到标准输出。有一组已知文本需要传递给该程序,我已将它们放入一个文件中begin.txt。所以我可以设置一个管道

cat begin.txt - | myprogram

问题稍后出现 - 如果我想发送我已经输入的内容(稍加修改),箭头不起作用,因为其中没有历史记录cat

  1. 因此,我正在寻找能够保留每行历史记录的东西。

最初我尝试使用vimand:.! myprogram但在执行条目(传递的文本)后myprogram退出,然后其状态丢失。我需要一种方法来保持程序正常运行,直到传递我的文本/命令。

  1. 是否可以vim以这种连续的方式在管道中充当过滤器的方式运行?

答案1

使用rlwrap。该rlwrap实用程序包装您使用它的任何实用程序,以便它获取 ReadLine 历史记录(以及一些 ReadLine 编辑功能,例如您在提示中习惯的功能bash)。它将把历史记录存储在下面的文件中$RLWRAP_HOME(或者$HOME如果未设置该变量)。

有了rlwrap,你就可以做到

rlwrap cat begin.txt - | myprogram

下次运行此程序时,您将拥有一个基本历史记录,您可以使用您Up-arrowDown-arrow按键滚动查看该历史记录。历史记录默认存储在~/.cat_history.

有关详细信息,请参阅rlwrap( )的手册。man rlwrap

答案2

cat begin.txt - << EOF
Type the 
text you want
here, terminated by a line with only
EOF

https://stackoverflow.com/q/2500436有关其工作原理的更多详细信息。

您在此期间输入的所有内容都将存储在 bash 历史记录中,因此您可以根据自己的喜好对其进行编辑。

如果您想要更灵活的东西,为什么不直接创建一个临时文件并对其进行编辑呢?

cat begin.txt > /tmp/myprograminput
editor /tmp/myprograminput
cat /tmp/myprograminput | myprogram

相关内容