В BASH есть очень удобная функция расширения параметров / переменных, которую я не вижу в истории. Я проверил справочные страницы для истории и для самого BASH. Не там ... может быть, я пропустил это.

Пример: я часто использую ssh и могу сделать это с расширением переменной.

host=foo@bar.org

Предположим, я хотел извлечь только хост - скорее, удалить имя пользователя.

hostonly=${host##*@}

Если я

echo $hostonly

Я получил:

bar.org

Мой вопрос:возможно ли это сделать с помощью истории командной строки?

например.,

Команда 1:

ssh foo@bar.org

Команда 2:

ssh gary@!!:##*@

Конечно, это не работает, но кто-то может подтвердить, доступен ли этот тип сопоставления с образцом?

Спасибо!

Bubnoff

2 ответа2

2

Уловка, которую часто упускают люди, - это команда r (которая сама по себе является частным случаем команды fc ):

$ ssh foo@bar.org
(...)
$ r foo=baz

Более общий случай

$ fc -s foo=bar ssh

который позволяет выбрать команду из истории по подстроке, затем выполнить указанную замену и запустить ее. Если вы пропустите параметр -s , он загрузит команду в $EDITOR для более сложной модификации; Редактирование командной строки в основном делает это ненужным, но есть некоторые правки, которые трудно сделать в командной строке.

Вы также можете делать довольно сложные манипуляции с помощью ! Синтаксис ссылки на историю, но по историческим причинам (основной механизм истории был создан ранним csh и все улучшения в основном сохранили совместимость) использует другой синтаксис. Смотрите здесь для деталей.

0
$ ssh foo@bar.org
...
$ ^foo^gary^
...

Команда повторяется с использованием "gary" в качестве имени пользователя вместо "foo". Следующее работает так же:

$ ssh foo@bar.org
...
$ !!:s/foo/gary/
...

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