Существует действительно удобная функция расширения параметра/переменной в Bash, что я не вижу историю. Я проверил страницы справочника на историю и на сам Bash. Не там..., возможно, я пропустил его.
Пример: Я использую ssh много, и я могу сделать это с переменным расширением.
host=foo@bar.org
Предположим, что я хотел извлечь просто хост - скорее удалить имя пользователя.
hostonly=${host##*@}
Если я
echo $hostonly
Я добираюсь:
bar.org
Мой вопрос: действительно ли возможно сделать это с историей командной строки?
например,
Команда 1:
ssh foo@bar.org
Команда 2:
ssh gary@!!:##*@
Это не работает, конечно, но кто-то может подтвердить, доступен ли этот тип сопоставления с образцом?
Спасибо!
Bubnoff
Аккуратный прием, часто пропускаемый людьми, r
команда (который является самостоятельно особым случаем fc
команда):
$ ssh foo@bar.org
(...)
$ r foo=baz
Более общий случай
$ fc -s foo=bar ssh
который позволяет Вам выбрать команду из истории подстрокой, затем выполнить указанную замену и выполнить ее. Если Вы кончаете -s
, это загрузит команду в $EDITOR
для более сложной модификации; командная строка, редактирующая главным образом, делает это ненужным, но существуют некоторые редактирования, которые трудно сделать на командной строке.
Можно также сделать довольно сложное использование управления !
справочный синтаксис истории, но по историческим причинам (основной механизм истории был установлен рано csh
и все улучшения главным образом сохранили совместимость), она использует другой синтаксис. Посмотрите здесь для деталей.
$ ssh foo@bar.org
...
$ ^foo^gary^
...
Команда повторяется с помощью "gary" как имя пользователя вместо "нечто". Следующие работы тот же путь:
$ ssh foo@bar.org
...
$ !!:s/foo/gary/
...