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