for*_*ord 6 command-line shell command-history dash posix
sh 中是否有命令历史记录,例如如何访问它,以及如何确保它清晰?
在此澄清 shell:假设您已登录到非 Gui Linux 系统,并且$SHELL未设置为 Bash,而是设置为 Dash 或任何类似 Bourne 的 shell。
手册页提到了一个“历史”命令,我在一些 BSD 系统中看到过,但这实际上不在我的 shell 中,而且我无法在随后的 sh 手册和信息页中轻松找到答案。
descriptor 在这篇文章中的评论让我想到,也许更多的是需要了解sh 中的键绑定,而不是实际上类似于 shell 之间的差异。
并非所有 shell 都支持历史记录。dash
如果使用 libedit 支持进行编译,则通过命令提供有限的历史记录支持fc
,但否则不支持。dash
无法保存历史文件。
通常,如果 shell 不支持向上箭头键,您可以假设它也不会保存历史文件。这不是一条硬性规定,但在我遇到的每一个案例中都是如此。
其他一些 shell(bash
尤其是其他 shell)使用 readline,它通常将历史记录作为~/.*_history
文件保存在主目录下,并*
替换为程序名称。例如,Python 3 使用 readline,并将其历史记录存储在~/.python_history
.
根据 shell 的不同,保存位置可能是可配置的,也可能是不可配置的。bash
并zsh
使用HISTFILE
(全部大写)变量。如果你的 shell 配置正确,这不应该是一个环境变量,所以如果你在 中看到它,你就犯了一个错误(但它仍然应该显示在或 的env
输出中)。set
printf %s\\n "$HISTFILE"
如果程序不支持历史记录(例如,ed
使用 的 shell 脚本read
或旧版本的mysql
),则会有一个名为 的跨平台应用程序,rlwrap
它将使用 readline 为其提供类似 bash 的 Tab 补全、箭头键处理和历史记录。
除非显式设置,否则没有默认的 shell 历史记录。要验证您是否拥有它,env|grep -i hist
可以执行该命令,如果您看到诸如等的变量histfile
(可能是大写的),则意味着您的 shell 历史记录已启用,您应该看到历史文件所在的位置。要清除,除了删除文件之外,您可以使用任何合适的方法
归档时间: |
|
查看次数: |
8364 次 |
最近记录: |