Управление историей Bash: поисковая замена

Существует действительно удобная функция расширения параметра/переменной в Bash, что я не вижу историю. Я проверил страницы справочника на историю и на сам Bash. Не там..., возможно, я пропустил его.

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

host=foo@bar.org

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

hostonly=${host##*@}

Если я

echo $hostonly

Я добираюсь:

bar.org

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

например,

Команда 1:

ssh foo@bar.org

Команда 2:

ssh gary@!!:##*@

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

Спасибо!

Bubnoff

0
задан 09.03.2011, 04:24

2 ответа

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

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

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

$ fc -s foo=bar ssh

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

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

2
ответ дан 24.11.2019, 06:43
$ ssh foo@bar.org
...
$ ^foo^gary^
...

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

$ ssh foo@bar.org
...
$ !!:s/foo/gary/
...
0
ответ дан 24.11.2019, 06:43

Теги

Похожие вопросы