我似乎发现文件~/.bash_history
不包含使用向上箭头时显示的内容。我通过执行如下命令发现了这一点
smbclient -L 10.2.10.240 -umyuser -p"mypassword on the command line is bad"
这个命令实际上是错误的,它有一个错误,-u
实际上应该是-U
,所以这个命令失败了。
然而,我也意识到这样做不好,因为它会将你的密码放入历史记录中,我进入了历史记录,.bash_history
有趣的是它没有错误。它只有
smbclient -L 10.2.10.240
就是这样。但这就是奇怪的地方,如果你使用向上箭头,整个命令包括那里有错误需要您修改。
那么问题是,为什么里面的内容.bash_history
和向上箭头显示的内容会有差异?向上箭头数据在哪里?
在你指出这一点之前;在这种情况下它非常方便,因为它可以防止我的密码被保存,但这不是它这样做的原因,我也用正确的选项测试了它,然后它做保存整个命令,包括密码和所有内容。
答案1
该~/.bash_history
文件仅在您关闭/退出终端时更新。当您在终端中时,您可以向后浏览在该会话中输入的命令。因此,如果您退出该终端会话,您的历史记录将使用缺失的命令进行更新。
另外,如果你在命令前一行开头加一个空格,该命令将不会被保存在历史记录中。如果你发出的命令不想包含在历史记录中,这是一个很好的做法。
答案2
您的问题已得到解答,但此外,如果您想输入历史记录中的实时数据,请输入:history
直接输入!后跟历史编号重新执行该命令,在手册页中你会发现一些在执行之前改变命令的好方法。
答案3
历史文件(通常是~/.bash_history
)的内容与当前历史记录(可通过上下箭头和命令访问history
)之间的主要区别是:
- 正如其他人提到的,当前 shell 的历史记录不是通常写入历史文件直到 shell 退出。
- 同样重要的是,当前壳牌的历史并不通常从历史文件中读取除了当 shell 启动时。
换一种方式:
- 当前 shell 中的命令直到 shell 退出时才会写入历史文件(即,在退出时写入它们)。
- 当前 shell 开始运行后添加到历史文件中的命令(例如,由另一个同时运行的 shell 实例添加)不能通过向上和向下箭头访问,也不能通过键入
history
和按 来访问Enter。
但是,该history
命令是 shell 内置的,选项可以改变此行为。您可以明确告诉 shell 读取或写入历史文件。具体来说,您可以:
- 将此 shell 的条目写入历史文件,放在现有条目之后 (
-a
) 或替代现有条目 (-w
) - 读取历史文件并添加未读条目(
-n
)或全部-r
此 shell 的历史记录条目 ( ) - 彻底清除此 shell 的历史记录 (
-c
) 或仅删除单个条目 ( )-d offset
了解更多信息:
help history
在 Bash shell 中运行。- 看看Bash 参考手册, 部分9.2 Bash 历史记录内建命令。
- 您也可能对。。。有兴趣是否可以立即写入 .bash_history ?