Reputation: 21505
I have two scripts that often need to be run with the same parameter:
$ populate.ksh 9241 && check.ksh 9241
When I need to change the parameter (9241 in this example), I can go back and edit the line in history. But since I need to change the number in two places, I sometimes make a typo. I'd like to be able to change the parameter just once to change it in both places.
Upvotes: 4
Views: 3215
Reputation: 101181
Correct answers have already been given, but for a more general understanding read the manpage with special attention to "History Expansion" and the associated shell variables (such as "HISTCONTROL
", "histchars
", etc.). BTW-- Your pager's search function is very useful when reading man bash
Upvotes: 2
Reputation: 21505
One solution is to simply create a wrapper script (populate_check.ksh) that calls the scripts in turn:
r=$1
populate.ksh $r && check.ksh $r
Or for multiple parameters:
for r; do
populate.ksh $r && check.ksh $r
done
For tasks that are more transient, you can also parametrize the command so that it's easier to edit in history:
$ r=9241; populate.ksh $r && check.ksh $r
Or to do several at once:
$ for r in 9241 9242; do populate.ksh $r && check.ksh $r; done
Upvotes: 1
Reputation: 223003
In bash:
!!:gs/9241/9243/
Yes, it uses gs///
, not s///g
. :-)
(zigdon's answer uses the last command starting with pop
, such as populate.sh
. My answer uses the last command, full stop. Choose which works for you.)
Upvotes: 10
Reputation: 15063
You can also use the history substitution feature:
!pop:gs/9241/1234
Like so:
$ populate.ksh 9241 && check.ksh 9241
...
$ !pop:gs/9241/1234
populate.ksh 1234 && check.ksh 1234
...
Upvotes: 5