终端保存历史记录中的垃圾值

终端保存历史记录中的垃圾值

当我按下上箭头浏览历史记录时,由于某种原因,终端会保存坏输出和好输出(命令和垃圾)。

例如,当我输入以下垃圾信息时,它会记住终端历史记录中的垃圾信息。

按下的命令:
按下的命令

输出:
输出

按向上箭头时:
按下向上箭头时

答案1

您现在看到的是 Bash 和大多数(如果不是全部)其他 shell 中的默认行为。我每天都在运行 Ubuntu 和其他操作系统的多台计算机上使用 Bash 和其他 shell,这都是依赖这种行为的。我从未进行过任何配置更改来实现它。我可以向您保证,Bash 的默认行为是不是忽略历史记录中的命令,因为它们失败了。

所以如果您觉得这个答案没什么帮助,我深表同情。但我会尝试描述和解释一般情况,以及为什么这种行为是默认行为,以及为什么您可能并不真正想要(并且以前可能没有)您似乎要求的确切行为。

一条评论,您澄清道:

使用终端时,通常只有成功运行的命令才会保存到 bash 历史记录中,现在任何垃圾输入都会被存储

很难确切地知道您之前设置的行为是什么,但如果您设法将 Bash 配置为这样做,那么您可能会对此非常不满意。这不会实现您可能认为它会实现的目标。因此,除非您对 Bash 以前的工作方式非常不满意,否则它很可能没有完全按照您描述的方式工作。

首先,许多命令按预期方式运行,但在某些情况下会返回表示失败的退出代码。除 0 之外的每个退出代码都被视为表示失败。例如:

  • find当您进行的测试未找到任何文件时,该命令将返回退出代码 1。find这样做主要是为了便于在脚本中使用,但即使您以交互方式运行它,它也会这样做。如果失败的命令被抑制,那么您将神秘地丢失从您的角度来看(以及从您位置的任何其他用户的角度来看)实际上已经成功的命令。
  • 如果发生以下情况,该ls命令将返回退出代码 2任何你传递的文件名中不存在,即使你传递了一个或多个其他文件名做过存在,并且它的信息成功地向你展示。

类似地,命令可能成功,即正常终止并返回退出代码 0,但实际上并没有执行您想要它执行的操作。

其次当命令失败时,这通常并不意味着你希望它更难让您了解发生了什么。当出现问题时,大多数人都希望能够轻松找出失败的原因。特别是,Rene Saarsoo 指出(作为Ravexina 引用) 指出,输入命令时出错很常见,然后按向上箭头,以便编辑并重试该命令。如果无法在 shell 的历史记录中访问失败的命令,您将无法执行此操作。

其他答案中提出了一些替代方案那个问题,这可能会让您感兴趣,尽管大多数用户可能不希望 Bash 执行任何类似于其中任何内容所描述的操作。例如,错误的命令很久以前你的历史可能会令人困惑,但也可能具有启发性,所以我怀疑大多数人会希望该设置

从你问题中的例子来看,你具体来说担心最近的你运行的命令始终存储在你的历史记录中。但是正如 pomsky 所说, 那默认行为。默认情况下,命令不是存储在历史记录中的唯一原因是它以一个或多个空格开头(这是一种防止记录单个命令的方法,前提是您在最初编写它们时知道您不希望它们出现)。

我认为你之前可能被一个奇怪的 bug 感染了恰好产生了您实际想要的特定行为。如果您可以更详细地描述您想要的行为,那么有人可能会提供如何实现它的说明。例如,也许您只希望在命令名称(即命令的第一个单词)未找到时从历史记录中省略命令。(在 Bash 中,这会产生退出状态 127;程序也将其作为退出代码返回,但幸运的是大多数都没有。)

但正如你问的,你的问题的答案是当前的您观察到的行为是默认行为,并且被认为是正确的。

相关内容