我有两个脚本经常需要使用相同的参数运行:
$ populate.ksh 9241 && check.ksh 9241
当我需要更改参数(在此示例中为 9241 )时,我可以返回并编辑历史记录中的行。但由于我需要改变两个地方的数字,我有时会打错字。我希望能够只更改一次参数以在两个地方更改它。
答案 0 :(得分:10)
在bash中:
!!:gs/9241/9243/
是的,它使用的是gs///
,而不是s///g
。 : - )
(zigdon的答案使用以pop
开头的最后一个命令,例如populate.sh
。我的答案使用最后一个命令,完全停止。选择适合你的命令。)
答案 1 :(得分:5)
您还可以使用历史记录替换功能:
!pop:gs/9241/1234
像这样:
$ populate.ksh 9241 && check.ksh 9241
...
$ !pop:gs/9241/1234
populate.ksh 1234 && check.ksh 1234
...
答案 2 :(得分:1)
一种解决方案是简单地创建一个依次调用脚本的包装器脚本( populate_check.ksh ):
r=$1
populate.ksh $r && check.ksh $r
或多个参数:
for r; do
populate.ksh $r && check.ksh $r
done
对于更短暂的任务,您还可以参数化命令,以便在历史记录中更容易编辑:
$ r=9241; populate.ksh $r && check.ksh $r
或者一次做几个:
$ for r in 9241 9242; do populate.ksh $r && check.ksh $r; done
答案 3 :(得分:1)
已经给出了正确的答案,但为了更一般的理解,请阅读联机帮助页,特别注意“History Expansion”以及相关的shell变量(例如“HISTCONTROL
”, “histchars
”等)。 BTW--阅读man bash