我有兩個腳本,經常需要使用相同的參數來運行:如何在不同參數的bash中重複使用命令?
$ populate.ksh 9241 && check.ksh 9241
當我需要改變(在這個例子中)的參數,我可以回去和編輯在歷史上的線。但是由於我需要在兩個地方改變這個數字,所以我有時會犯一個錯字。我希望能夠只改變一次參數來在兩個地方改變它。
我有兩個腳本,經常需要使用相同的參數來運行:如何在不同參數的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