2008-10-14 2 views
4

У меня есть два сценария, которые часто должны выполняться с тем же параметром:Как повторно использовать команду в bash с разными параметрами?

$ populate.ksh 9241 && check.ksh 9241 

Когда мне нужно изменить параметр (в данном примере), я могу вернуться назад и изменить строку в истории , Но поскольку мне нужно изменить число в двух местах, я иногда делаю опечатку. Я бы хотел изменить параметр один раз, чтобы изменить его в обоих местах.

ответ

10

В Баш:

!!:gs/9241/9243/ 

Да, он использует gs///, а не s///g. :-)

(ответ zigdon использует последнюю команду, начинающуюся с pop, например populate.sh. Мой ответ использует последнюю команду, полный стоп. Выберите, который работает для вас.)

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 
+0

Не говорите «для r в $ *»; вместо этого предпочитают говорить «за r». Последнее позволяет вам указывать аргументы с пробелами или другими символами IFS. – 2008-10-14 20:24:27

+0

Для lurkers и archives: `for r` эквивалентно` for r в '$ @ "`, для тех, кому не хватает оболочки, не поддерживающей более короткую форму. – 2008-10-14 20:25:31

5

Вы также можете использовать функцию истории замещения:

!pop:gs/9241/1234 

Как так:

$ populate.ksh 9241 && check.ksh 9241 
... 
$ !pop:gs/9241/1234 
populate.ksh 1234 && check.ksh 1234 
... 
1

Правильные ответы уже даны, но для более общего понимания прочитайте manpage с уделением особого внимания «Расширение истории» и связанные с ним переменные оболочки (например, «HISTCONTROL», «histchars» и т. д.). BTW - Функция поиска пейджера очень полезна при чтении man bash

Смежные вопросы