Як я можу додати команду до історії 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.