向上箭头和 .bash_history 有不同的命令,那么向上箭头从哪里获取其数据?

向上箭头和 .bash_history 有不同的命令,那么向上箭头从哪里获取其数据?

我似乎发现文件~/.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

了解更多信息:

相关内容