1

Я хочу выполнить одну команду, затем вызвать вторую, но сначала изменить ее, прежде чем нажать Enter. (Cygwin)

Я обычно просто печатаю все это так:

svn up 8.0; ./merge.py 8.0 12345

Я также должен сделать это с различными версиями и ревизиями, поэтому после этого я снова набираю все это для каждой:

svn up 8.1; ./merge.py 8.1 12345

Проблема в том, что 12345 всегда меняется, поэтому мне нужно просто стрелку вверх, удалить и снова ввести его.

Итак, что я хочу сделать, это напечатать:

m8 12345

или же

m81 12345

или же

m8 54321

Для каждого другого. Результаты будут:

$ m8 12345
$ svn up 8.0; ./merge.py 8.0 12345

(но на самом деле не работает, просто набрал для меня в командной строке)

$ m81 12345
$ svn up 8.1; ./merge.py 8.1 12345

(но на самом деле не работает, просто набрал для меня в командной строке)

$ m8 54321
$ svn up 8.0; ./merge.py 8.0 54321

(но на самом деле не работает, просто набрал для меня в командной строке)

В этот момент я мог нажать Enter, или изменить 12345 вокруг, или ничего не делать.

3 ответа3

1

Создайте alias для первой части команды. Когда вы закончите, вы можете unalias это.

Что бы вы сделали в своем примере:

alias m8='svn up 8.0; ./merge.py 8.0'

Что тогда позволяет вам сделать:

m8 12345

Когда вы закончите, вы можете удалить псевдоним:

unalias m8
0

Напишите сценарий оболочки или функцию (например, с именем m), которая делает что-то вроде этого:

 Проверьте аргументы: $1 и $2 являются числовыми.
 Вычислить ver_num от $1 ; например, 8 -> 8.0 , 81 -> 8.1
my_command="svn up $ver_num; ./merge.py $ver_num $2"
echo "$my_command"
history -s "$my_command"

Вы должны будете запустить его как m 8 12345 (вместо m8 12345).  Команда history -s поместит «$ my_command» в список истории, не выполняя его, поэтому вы должны иметь возможность нажать Курсор вверх, при желании отредактировать команду и нажать Enter –– или ничего не делать.

0

Используйте возможности истории bash . Поместите следующее в ваш файл .bashrc :

shopt -s histverify

Теперь в командной строке вы можете набрать Control r и начать набирать svn up . Он должен найти в вашей истории первую команду, которая начинает "svn up". Повторные нажатия Control r найдут предыдущие такие команды. Если в любое время вы нажмете Enter, опция histverify мы установили выше, приведет к тому, что отображаемая в данный момент команда будет отображаться в командной строке для редактирования, а не сразу.

Это не совсем то, что вы просили, но может работать так же хорошо. Можно написать функцию, которая может вести себя аналогично ($ m 8.1 54321), но детали сложны.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .