Збережіть команду в історію без виконання в bash


8

Чи є спосіб зберегти команду в історії bash, не виконуючи її? напр

$ cmd [a long list of arguments] 

а зараз під час набору тексту я пам’ятаю, що хотів би спочатку зробити щось інше. Чи можу я мати щось подібне

$ cmd [a long list of arguments][some-key-strokes]

і це насправді не виконується, але переходить в історію баштів, щоб я міг його використовувати пізніше?


5
У цій ситуації я просто додаю рядок до #і натискаю Enter.
Олівер Чарльворт

Відповіді:


5

Може бути і кращий спосіб, але ви можете використовувати :pмодифікатор розширення історії, щоб надрукувати поточний рядок коментарів без виконання. !#є поточною лінією, і %сама по собі нічого не відповідатиме

$ cmd [arguments] !#%:p

круто! ;) і без необхідності уникнути спеціальних символів у команді, що може заплутатися, якщо команда не просто ls -al+1

круто! дуже акуратний

8

Використовуйте -sпараметр для historyкоманди:

history -s cmd arg1 arg2

Заклик до history -sсебе, зручно, не додається до історії команд, тому у вашій історії він видається так, ніби ви виконали, cmdне роблячи цього.


круто! це теж приголомшливо

1

Зазвичай це робиться

echo 'cmd [a long list of arguments]' >> /home/you/bash_history

Зауважте, що назва історії може відрізнятися у вашій системі. Тому ви можете використовувати HISTFILEсередовище var

що робить:

echo 'cmd [a long list of arguments]' >> "$HISTFILE"

1

Зазвичай я просто додаю # на початок рядка, щоб перетворити рядок у коментар:

#cmd [a long list of arguments] 

Я вважаю за краще цей спосіб, тому що ви можете зробити це лише з 3 [4, якщо вам потрібно SHIFT для вставки #] натискань клавіш

^a#<ENTER>

^ a переходить до початку поточного рядка

# додає коментар

ENTER виконує коментар


0

У цій ситуації я просто приставлюйте рядок до # і натискаю Enter.

... або використовувати комбінацію клавіш: ESC #

bind -p | grep -i 'insert-comment'   # "\e#": insert-comment

Дивіться також: Bash - команда збереження, не виконуючи її


0

Ви можете спробувати додати пробіл та | (труба) в кінці рядка, натиснувши клавішу Enter, а потім Ctrl-C'ing.

( Space, |, Enter, Ctrl+ C)

Команда буде у вашій історії з | наприкінці (можна просто видалити за допомогою зворотного простору) замість # на початку (можливо, більш виснажливе видалення).

ВІДМОВА: Я не знаю, чи завжди це працює! Використовуйте на свій страх і ризик!

$ cmd [довгий список аргументів] |

> Ctrl+C

$ Up

$ cmd [довгий список аргументів] |


0

Ви можете спробувати скористатися цим рядком:

history -s -p $COMMAND

Від help:

The -p option means to perform
history expansion on each ARG and display the result,

Це означає, що ви можете розширити такі речі, як !!і зберегти результат у нижній частині історії.


history -sбуло дано у відповіді два роки тому. Чи -pполіпшення на цьому? Що робить -p? (Наскільки це має сенс зробити це, ви повинні відредагувати свою відповідь, щоб покращити її, а не відповідати на мій коментар іншим коментарем.)
G-Man каже: "Поновіть Моніку"

0

Ще один варіант - перейти до початку рядка і зробити те, що ви збиралися зробити, після чого &&, як

rm old_file && cmd [args]

Отже, якщо те, що ви хотіли зробити, вдалося, ваша команда запуститься відразу після цього, і якщо вона не вдасться, команда не запуститься, але вона буде в історії. Ви також можете зробити

test && cmd [args]

Оскільки тест без аргументів не вдасться, але це декілька зайвих натискань клавіш порівняно з #методом.


0

Я думаю, що потрібні "деякі ключові штрихи" - це Ctrl-U та Ctr-Y, які зберігають рядок у кільце для вбивства, а потім витягують його пізніше. Це не входить в історію, але тоді я думаю, що не повинно, як ви цього не зробили.

Прочитайте вбивчі команди

Вбивство і янки

Я дізнався це років тому, потім забув і теж шукав ці ключові штрихи.

Це також обговорюється тут: /unix/140741/how-to-save-a-command-you-entered-without-executing-it

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.