我正在对一组文件运行类似的命令。例如,假设我正在做这样的事情(这不是我正在做的事情,只是一个例子):
> cat path/to/dir/file01.txt
[file contents]
> another-command path/to/dir/file01.txt
[more output]
> cat path2/to/dir/file02.txt
[file contents, from which I can tell I should do something different]
> different-command path2/to/dir/file02.txt
[yet more output]
> cat path3/to/dir/file03.txt
[file contents]
> another-command path3/to/dir/file03.txt
[output]
ETC。
↑如果使用该键返回到上一个命令后,我可以覆盖非重复的文本(例如文件名或路径的通用部分),而不必删除它并重新输入,那将会很方便。
有没有办法做到这一点?
答案1
不是你直接要求的,但你可以使用各种形式的历史互动简化你的任务:
$ cat path/to/dir/file01.txt
cat: path/to/dir/file01.txt: No such file or directory
$ different-command !$
different-command path/to/dir/file01.txt
bash: different-command: command not found
$ cat !$:s/1/2/
cat path/to/dir/file02.txt
cat: path/to/dir/file02.txt: No such file or directory
$ ^2^3
cat path/to/dir/file03.txt
cat: path/to/dir/file03.txt: No such file or directory
$ !-3:s/1/3/
different-command path/to/dir/file03.txt
bash: different-command: command not found
$ !diff:s/3/4/
different-command path/to/dir/file04.txt
bash: different-command: command not found
忽略错误,每次我使用历史交互(,,!$
)时,您都可以看到它是如何扩展的。!$:s/1/2
^2^3
bash
!$
- 前一个命令的最后一个字:s/1/2
- 用 替换所选单词中第一次出现的1
(在本例中,又是)。2
!$
^2^3
-在整个前一个命令中用替换第一次出现的2
。3
!-3
- 运行倒数第三个命令。!diff
- 运行以 开头的最后一个命令diff
。
答案2
您可以将一个键绑定到中的 readline 指令$HOME/.inputrc
。
"code": overwrite-mode
要发现特定键生成的代码,请同时按下Ctrl和,V然后按下该键。例如,当您按下Ins
(插入)键时,您会看到^[[2~
。请注意,这^[
只是 ESC 的屏幕表示,它用\e
readline 表示。因此,您应该将以下行添加到$HOME/.inputrc
:
"\e[2~": overwrite-mode
并重新启动 bash。
答案3
Bash 有这个功能,但是默认情况下它没有绑定到任何键。
添加行
Control-o: overwrite-mode
$HOME/.inputrc
或者使用+在插入模式和覆盖模式之间切换/etc/inputrc
。Ctrlo
READLINE
请参阅Bash 手册页了解更多信息。