В Bash, я хотел бы создать привязку в моем .inputrc
, которая использует встроенный !!
, чтобы повторить последнюю команду. Но это, кажется, не правильно расширить !!
Как я могу использовать !! как часть моей привязки клавиатуры .inputrc?
bind -x '"\C-t": echo $(!!)'
Когда я призываю выше связывания (Ctrl + т) Я просто получить это:
-bash: !!: command not found
Аналогично проще
bind -x '"\C-t": echo !!'
Только что дал
!!
Вместо фактической команды. Очевидно, что мой реальный случай использования более существенен, чем этот пример, это всего лишь иллюстрация проблемы.
Edit:
Этот вопрос не имеет ничего общего с echo "#!" fails -- "event not found" которой испрашивается месторождение является дубликатом. Этот вопрос относится к обобщенному отказу от расширения !*
в обычном bash из-за цитирования вопросов или отсутствия истории. Мой вопрос, с другой стороны, очень специфичен для контекста использования внутри файла .inputrc
(или, возможно, псевдонима), где вступает в игру другой набор факторов. В моей обычной командной строке так называемые «расширения взлома» всегда работали нормально. Только в этих особых контекстах возникли проблемы и, следовательно, привели к этому вопросу.
Я думаю, что возможно, что под командой 'bind'' !! 'не рассматривается как команда. Ваш последний пример настолько очевиден, он считается буквальным письмом. – fronthem
Возможно, вы можете сделать это с помощью этого 'eval $ (tail -2 ~/.bash_history | head -1)' вместо 'echo !!'. Я не уверен, но, пожалуйста, попробуйте. – fronthem