通常,我需要遵循复杂的安装过程,例如必须为构建工具构建依赖项,为我希望从源安装的应用程序构建依赖项。
一旦我完成了一次,我真的不想尝试并记住我已经完成的所有步骤。
zsh(和其他 shell)中的命令历史记录已经记录了我所做的事情。是否可以将最近执行的 100 个(例如)命令导出到.sh
脚本中?
然后,我可以编辑此脚本,删除开始安装之前的命令,并删除我犯错误的命令,并留下一个安装脚本,我可以将其提供给类似环境中的其他人。 (或者在另一台机器上使用我自己。)。
我怀疑我的命令历史记录已经存储在我的主目录中的点文件之一中。
答案1
内置命令fc
允许您使用多个条件从历史记录中提取命令(请参阅man zshbuiltins
参考资料)。
fc
代表“修复命令”,当不带参数调用时,它会打开一个编辑器,其中包含最后输入的命令。您可以使用编辑器的所有功能来更改命令,并在保存并退出时zsh
运行固定命令。默认使用的编辑器是vi
,但可以使用EDITOR
shell 变量覆盖它,或者,如果您想通过命令使用特定编辑器fc
,则可以使用FCEDIT
。
fc
有许多选项可以操作最后一个命令之外的历史记录,其中一些选项恰好提供了您所要求的功能。
该-l
选项“列出”历史记录的内容。默认情况下,它列出最后 16 个命令,但您可以指定下限和上限,作为历史记录中的索引,甚至作为命令的起始文本。负索引从最后一个命令开始工作,因此要提取最后 15 行:
fc -l -15
默认情况下,fc -l
包括历史索引作为其输出的第一列。一旦获得了所需的确切范围,-n
就可以删除数字:
fc -ln -12 -5
将仅以适合脚本的格式提取那些行(从第 12 行到第 5 行)。
使用命令作为边界非常有用:
fc -l rm ls
rm
列出从最后一个开始到最后一个结束的所有历史记录(因此输出中将ls
有一个命令,但可能有多个命令)。rm
ls
还有许多其他选项,例如添加时间戳、替换部分命令、加载和保存部分历史记录、切换整个历史记录堆栈......
答案2
@jimmij 更正
最初我写这篇文章时考虑到了错误的 shell(bash 而不是 zsh)。下面反映了更正后的代码
history | cut -c 8-
此外,要将历史记录限制为一定数量的行,请运行
history -<number of lines> (history -20 prints the last 20 entries)
最后:history -20 | cut -c 8- > commands_list.sh
在该文件的开头敲击 a ,完成。#!/bin/bash
#!/bin/zsh
chmod +x commands_list.sh