Playing It Safe
Problem
It is so easy to type the wrong character by mistrake (see!). Even for simple bash commands this can be quite serious—you could move or remove the wrong files. When pattern matching is added to the mix, the results can be even more exciting, as a typo in the pattern can lead to wildly different-than-intended consequences. What’s a conscientious person to do?
Solution
You can use these history features and keyboard shortcuts to repeat arguments without retyping them, thereby reducing the typos. If you need a tricky pattern match for files, try it out with echo to see that it works, and then when you’ve got it right use !$ to use it for real. For example:
$ ls ab1.txt ac1.txt jb1.txt wc3.txt $ echo *1.txt ab1.txt ac1.txt jb1.txt $ echo [aj]?1.txt ab1.txt ac1.txt jb1.txt $ echo ?b1.txt ab1.txt jb1.txt $ rm !$ rm ?b1.txt $
Discussion
The echo is a way to see the results of your pattern match. Once you’re convinced it gives you what you want, then you can use it for your intended command. Here we remove the named files—not something that one wants to get wrong.
Also, when you’re using the history commands, you can add a
:p
modifier and it will cause
bash to print but not execute the command—another
handy way to see if you got your history substitutions right. From the
Solution’s example, we add:
$ echo ?b1.txt ab1.txt jb1.txt $ rm !$:p rm ?b1.txt $
The :p
modifier caused
bash to print but not execute the command—but
notice that the argument is ?b1.txt
and not expanded ...
Get bash Cookbook now with the O’Reilly learning platform.
O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.