J'exécute des commandes similaires sur (par exemple) un ensemble de fichiers. Par exemple, disons que je fais quelque chose comme ceci (ce n'est pas ce que je fais, c'est juste un exemple):
> 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.
Ce serait pratique si, après avoir utilisé le ↑ touche pour revenir à une commande précédente, je pourrais écraser le texte non dupliqué - comme le nom du fichier ou une partie commune du chemin - plutôt que de le supprimer et de le retaper.
Y a-t-il un moyen de faire cela?
Bash a cela, mais il n'est lié à aucune clé par défaut.
Ajouter la ligne
Control-o: overwrite-mode
à votre $HOME/.inputrc
ou /etc/inputrc
à utiliser Ctrl+o pour basculer entre le mode insertion et le mode substitution.
Voir la section READLINE
de la page de manuel Bash pour plus d'informations.
Ce n'est pas ce que vous avez demandé directement, mais vous pouvez utiliser différentes formes de interaction avec l'historique pour simplifier votre tâche:
_$ 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
_
En ignorant les erreurs, chaque fois que j'utilisais une interaction d'historique (_!$
_, _!$:s/1/2
_, _^2^3
_), vous pouvez voir comment bash
l'a développée.
!$
_ - le dernier mot de la commande précédente:s/1/2
_ - remplace la première occurrence de _1
_ par _2
_ dans le mot sélectionné (dans le cas présent, il s'agissait de _!$
_.).^2^3
_ - remplace la première occurrence de _2
_ par _3
_ dans toute la commande précédente.!-3
_ - lance la troisième commande.!diff
_ - lance la dernière commande qui a commencé avec diff
.Vous pouvez lier une clé à une directive readline dans $HOME/.inputrc
.
"code": overwrite-mode
Pour découvrir le code généré par une touche spécifique, appuyez sur CtrletV ensemble puis appuyez sur cette touche. Par exemple, lorsque vous appuyez sur la touche Ins
(insérer), vous voyez ^[[2~
. Attention, ^[
n'est que la représentation de l'écran pour ESC, qui est représentée par \e
pour readline. Par conséquent, vous devez ajouter la ligne suivante à $HOME/.inputrc
:
"\e[2~": overwrite-mode
et redémarrez bash.