如何在不同参数的bash中重复使用命令?
问题描述:
我有两个脚本,经常需要使用相同的参数来运行:如何在不同参数的bash中重复使用命令?
$ populate.ksh 9241 && check.ksh 9241
当我需要改变(在这个例子中)的参数,我可以回去和编辑在历史上的线。但是由于我需要在两个地方改变这个数字,所以我有时会犯一个错字。我希望能够只改变一次参数来在两个地方改变它。
答
在bash:
!!:gs/9241/9243/
是的,它使用gs///
,而不是s///g
。 :-)
(zigdon的答案使用的最后一个命令开始pop
,如populate.sh
。我的回答使用的最后一个命令,句号,选择一种适合你。)
答
一种解决方案是简单地创建一个包装脚本(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
答
您还可以使用历史替换功能:
!pop:gs/9241/1234
像这样:
$ populate.ksh 9241 && check.ksh 9241
...
$ !pop:gs/9241/1234
populate.ksh 1234 && check.ksh 1234
...
答
正确答案已经给出,但为了更全面的理解,请阅读手册页,特别注意“History Expansion”和相关的shell变量(如“HISTCONTROL
”,“histchars
”等)。顺便说一句 - 你的寻呼机的搜索功能是非常有用的,当阅读man bash
不要说“对r $ *”;宁愿说“替代”。后者允许您使用空格或其他IFS字符指定参数。 – 2008-10-14 20:24:27
对于潜伏者和档案:对于那些不幸使用不支持较短形式的shell的人,“for r”等同于“$ @”中的r。 – 2008-10-14 20:25:31