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





Одно из решений - просто создать сценарий-оболочку (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
Для люркеров и архивов: for r эквивалентен for r in "$@", для тех, кому не повезло использовать оболочку, не поддерживающую более короткую форму.
Превосходно! Еще раз, размещение вопросов, на которые я знаю ответ, окупается. Спасибо.
вы также можете определить функцию оболочки и поместить ее в файл $ SHELLrc, что лучше, чем писать еще один файл сценария.
Вы также можете использовать функцию подстановки истории:
!pop:gs/9241/1234
Вот так:
$ populate.ksh 9241 && check.ksh 9241
...
$ !pop:gs/9241/1234
populate.ksh 1234 && check.ksh 1234
...
В bash:
!!:gs/9241/9243/
Да, он использует gs///, а не s///g. :-)
(В ответе zigdon используется последняя команда, начинающаяся с pop, например populate.sh. В моем ответе используется последняя команда, точка полной остановки. Выберите, которая вам подходит.)
Я не знаю, правда ли это, но эта функция, похоже, использует больше нажатий клавиш, чем просто редактирование командной строки. Раньше мне нравилась нотация взрыва для вспоминания истории, но по какой-то причине я больше ее не использую. Надеюсь, ваш ответ поможет другим. ;-)
Подумайте о сложной команде с множеством логических операторов и конвейеров, эта спасет вам жизнь :)
Буква "g" у меня не работает. Он заменяет только первое вхождение 9241. Есть ли в bash параметр конфигурации, который нужно установить?
Правильные ответы уже были даны, но для более общего понимания прочтите справочную страницу с особым вниманием к «Расширение истории» и связанным переменным оболочки (таким как «HISTCONTROL», «histchars» и т. д.). Кстати - функция поиска вашего пейджера очень полезна при чтении man bash
Не говорите «for r in $ *»; предпочитаю вместо этого говорить «за г». Последний позволяет указывать аргументы с помощью пробелов или других символов IFS.