tuo*_*alo 7 bash command-history
为什么bash
即使我没有执行我正在修改的命令也会更改历史记录?例如,如果我输入:
$ echo foo1
foo1
$ echo foo2
foo2
$ echo foo3
foo3
Run Code Online (Sandbox Code Playgroud)
在此之后,我按up两次,然后我得到echo foo2
提示。我按下2并得到echo foo22
。现在回到结尾(空行) downdown。如果我现在搜索历史记录,echo foo22
即使我从未执行过该命令,我也会看到!
但是,当我退出 shell 并打开另一个 shell 时,我看到了原始的、已执行的命令。我觉得这一切都非常令人困惑、违反直觉和令人恼火。
我希望历史事情像这样工作:
只有实际执行的命令才会保存到历史记录中。
历史是不可改变的。(除非明确清除。)
有没有办法做到这一点?
编辑 - 这个问题似乎相关:Is there any way to undo a bash history modified?
我发现这一切非常令人困惑、违反直觉且令人恼火。
这是你的意见;我为一种编程语言实现了一个交互式 REPL,其中每一行历史记录不仅可以编辑,而且有自己独立的撤消历史记录。因此,尽管可能存在从未运行过的命令,但您可以使用向上箭头返回到该命令并将其撤消回原始状态。
然而,就像在 Bash 中一样,只有当您离开修改的行时,历史记录的编辑才会保存到历史记录中。如果您编辑该行然后将其作为新命令重新提交而无需导航离开它,则不会!在这种特殊情况下,编辑不会保存到历史记录中,因为它们被保存为新的历史记录条目。
这是有规律和理由的!
在将历史行作为新命令提交之前不允许对其进行编辑,这显然是违反直觉且令人恼火的。
如果您离开历史行查看另一行,那么简单地丢失对历史行的编辑将是违反直觉且令人恼火的。
一个可能的解决方案可能是这样的:当用户编辑历史记录行时,将其保存在代表新要提交的行的临时区域中(并且不更新历史记录)。然而:
这仍然是违反直觉且令人恼火的。用户将无法编辑一行,请按两次向上箭头查看上一行,然后按两次向下箭头返回编辑。然后,用户将看到原始的未编辑行,并且必须一直导航到历史记录的前面,才能在当前(“历史记录零”)编辑缓冲区中找到该行的新版本。
如果用户在两个不同的历史记录行中进行了两次编辑怎么办?如果最近的此类编辑被最新的编辑悄然破坏,那将是令人恼火的。
拥有不可变历史记录的唯一方法是,您可以同时进行多个临时编辑,并以任何顺序将它们作为新命令提交,但这种方法可能很难在当前的 UI 范例中呈现而不造成混淆。“当前 UI 范例”是整个工作区(历史记录加上新条目)映射到屏幕上的单个编辑窗口,并带有视图(如果有)关于用户所在位置的任何视觉线索以及任何状态指示。
我们可能需要一个位置指示器(一些小数字,向用户指示他们在历史空间中的位置),指示该历史行是否包含临时修改;一种在查看修改或底层未更改行之间切换的方法;一种使修改永久生效的方法(改变历史记录);放弃对一行或一系列行或所有行等的修改的方法。
归档时间: |
|
查看次数: |
497 次 |
最近记录: |