2015-09-16 1 views
2

В 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 (или, возможно, псевдонима), где вступает в игру другой набор факторов. В моей обычной командной строке так называемые «расширения взлома» всегда работали нормально. Только в этих особых контекстах возникли проблемы и, следовательно, привели к этому вопросу.

+0

Я думаю, что возможно, что под командой 'bind'' !! 'не рассматривается как команда. Ваш последний пример настолько очевиден, он считается буквальным письмом. – fronthem

+0

Возможно, вы можете сделать это с помощью этого 'eval $ (tail -2 ~/.bash_history | head -1)' вместо 'echo !!'. Я не уверен, но, пожалуйста, попробуйте. – fronthem

ответ

0

Ну, кажется, есть что-то странное происходит с скорлупа процитировать.

Это не работает

bind -x '"\C-l": "!! \n"' 

Но положить это в .inputrc делает

"\C-l": "!! \n" 

Не понимаю, почему бывший не работает, но, по крайней мере, последний делает.

EDIT: ОК получил. По-видимому, «-x» не требуется при определении на линии cmd. Таким образом, мы можем просто написать

bind '"\C-l": "!! \n"' 

Использование -x рассказывает связать, чтобы не мешать, что вы уже набрали (почти как первобытный Ncurses приближения модального окна!), Который не то, что я после. Благодаря принятому ответу на In bash, how do I bind a function key to a command? для этого понимания!

0
"\C-t": "fc -s\n" 

fc -s повторно выполняет последнюю команду, и fc также встроенный:

$ type fc 
fc is a shell builtin 

 Смежные вопросы

  • Нет связанных вопросов^_^