Как мне повторно использовать команду в bash с другими параметрами? - PullRequest
4 голосов
/ 15 октября 2008

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

$ populate.ksh 9241 && check.ksh 9241

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

Ответы [ 4 ]

10 голосов
/ 15 октября 2008

В Баш:

!!:gs/9241/9243/

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

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

5 голосов
/ 15 октября 2008

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

!pop:gs/9241/1234

Вот так:

$ populate.ksh 9241 && check.ksh 9241
...
$ !pop:gs/9241/1234
populate.ksh 1234 && check.ksh 1234
...
1 голос
/ 15 октября 2008

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

1 голос
/ 15 октября 2008

Одним из решений является создание скрипта-оболочки ( 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...