如何自定义 Bash 使得上下键与 cmd 中的相同?
例如
$echo command1
$echo command2
$echo command3
$echo command4
在 Bash 和 cmd 中,按↑, ↑, ↑,ENTER将运行echo command2
。
但是,随后按下 cmd 中的向下键将直接转到后面的命令,即echo command3
。按下 Bash 中的向下键不执行任何操作。cmd 保留时间点历史记录(类似于 Web 浏览器中的后退和前进按钮),但 Bash 不保留。
与 cmd 类似,在 cmd 中按两次向上键将返回echo command1
,而在 Bash 中执行此操作将返回echo command3
。
很多时候,我希望删除之前按顺序输入的一系列命令。cmd 非常方便,我可以通过历史记录回滚到序列中的第一个命令,然后↓,,,,,,...ENTER↓ENTER↓ENTER
但是我在 Bash 中找不到类似的方法。是否可以以~/.inputrc
某种方式修改或修改其他文件来实现这一点?
答案1
虽然我个人不想这样做,因为我已经习惯了 bash 历史,但我能理解为什么人们会想这样做。我以前为一位同事研究过这个问题,他是 *nix 的新手,想在 xterm 中使用类似 DOS 的功能,但当时和现在一样,似乎没有解决方案。
我刚刚又进行了一次广泛的搜索,除了以下之外,没有发现任何明显的东西:
- 剂量测定,这并不是您所追求的,并且;
- 使用 shell 脚本让 Linux 命令行像 DOS 一样工作,但链接似乎有些断断续续,而且这可能不是你真正想要的。此链接仅提供替代通过使用自定义脚本,将 Unix 命令转换为 DOS 命令。
奇怪的是,有很多方法可以让 cmd 更像 bash,例如,Windows 命令提示符的类似 Bash 历史记录的功能,但不幸的是而不是相反。
主要问题是,简单地说,光标键功能(以及它如何与历史记录交互)内置于 Bash 源代码中,而脚本、别名和 shell 函数无法覆盖这一事实1。你需要的是重写bash,具有内置的不同 [可切换?] 光标键功能,如果你愿意的话,可以说是一种“DOSBash”。
也许存在满足某个利基市场的机会,并且最终会有人满足这一需求,但我不会指望你能做到。
1如果我错了,而且可以通过简单的资源文件更改来覆盖光标键功能,那么如果有人能纠正我,我会很高兴。
答案2
我使用的技巧就是简单地重复相同数量的↑:
$ echo command1
$ echo command2
$ echo command3
$ echo command4
echo command 2
如果我想重复从到的序列echo command4
,我只需点击↑3次即可到达echo command2
,然后再点击3次即可到达echo command3
并再点击3次即可echo command4
。
因此,如果您通过点击 N 次返回了历史记录中的 N 个项目↑,则再次点击 N 次将使您每次都进入下一个命令,因为您运行的新命令已被插入。