Як я можу додати команду до історії Bash, не виконуючи її?


32

Раз у раз корисно було б додавати команду безпосередньо до історії в Bash, не виконуючи її. Поки що закрита річ, яку я знайшов, - це додавання #перед нею та влучення повернення. Чи є кращі способи?

Відповіді:


39

history -s командування


Ніколи не знав про цю особливість. Я не можу придумати його негайного використання, але це добре знати.
Дуг Харріс

7
Чи знаєте ви, чи можна запустити подібну команду до цього зі сценарію? У мене є сценарій ./resize-images.sh, остаточний рядок якого вказує на команду, яку слід запустити, щоб скасувати зміни, було б дуже корисно, якби замість цього сценарій міг додати команду до моєї історії, тому я просто натиснув, up-enterякщо мені потрібно було скасувати
Ben Page

1
@BenPage: Подивіться на обох відповідей тут: unix.stackexchange.com/questions/112354 / ... .
RustyTheBoyRobot

9

history -s командування

Ви можете навіть прив'язати натискання клавіші, щоб зробити це за вас. Ви можете ввести це у запиті Bash:

bind '"\C-q": "\C-a history -s \C-j"'

або додайте це до свого ~/.inputrc:

"\C-q": "\C-a history -s \C-j"

тоді ви можете ввести щось і натиснути Ctrl- qі воно буде додано в історію без виконання. Пробіл перед "історією" призводить до того, що historyсама команда не буде додана до історії, якщо HISTCONTROLзмінна містить ignorespaceабо ignoreboth. Інший натискання клавіші можна вибрати замість "\ Cq".


3

Важко придумати що-небудь коротше, ніж команду з одним символом, тому нам дійсно потрібно перейти до рівня натискання клавіш. Завдяки моєму налаштуванню bash та американській клавіатурі потрібне:

  1. Перейдіть до початку рядка CTRLA:: +1 інструкція, +2 натискання клавіш
  2. Додавання #(потреби SHIFT): інструкція +1, +2 натискання клавіш
  3. Додавання його до історії за допомогою ENTER: інструкції +1, натискання клавіші +1

тому загалом 3 інструкції, 5 натискань на клавіші.

Використання ALT#робить те саме в 1 інструкції, 2 натискання клавіш.

YMMV залежно від компонування клавіатури та конфігурації bash.


3
Проблема полягає не в кількості натискань клавіш, а в тому, що "#command" зберігається в історії замість призначеної "команди".
Grumbel

1
Приємно, що "#command" зберігається у файлі історії, оскільки він дозволяє вам знати, що команда насправді не була виконана. Це може бути приємно, якби ви пізніше хотіли переглянути, які команди ви ввели, щоб вирішити проблему.
Marnix A. van Ammers

2
@Grumbel, @Marnix: Погодився, я не відповів на це запитання, але показав, як зробити те, що він робить зараз, ще швидше. Особисто я думаю, що використання #commandнабагато швидше history -s command, а також дуже просте у використанні, якщо history-search-backward/-forwardправильно скласти карту . Але це справа смаку.
Бенджамін Баньє
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.