Щоб вимкнути розширення історії в певному командному рядку, ви можете використовувати space
як 3-й символ $histchars
:
histchars='!^ '
Тоді, якщо ви введете свою команду з провідним простором, розширення історії не буде виконуватися.
bash-4.3$ echo "#!/bin/bash"
bash: !/bin/bash: event not found
bash-4.3$ echo "#!/bin/bash"
#!/bin/bash
Однак зауважте, що провідні пробіли також використовуються, коли $HISTCONTROL
містять ignorespace
як спосіб сказати bash
не записувати командний рядок в історію.
Якщо ви хочете, щоб обидві функції були незалежно, вам потрібно вибрати інший символ як 3-й символ $histchars
. Ви хочете, щоб він не впливав на інтерпретацію вашої команди. Кілька варіантів:
- використання зворотної косої риски (
\
): \echo foo
працює, але це побічний ефект відключення псевдонімів або ключових слів.
- ТАБЛИЦЯ: щоб вставити її в перше положення, потрібно натиснути, Ctrl+VTabхоча.
якщо ви не заперечуєте , набравши два ключа, ви можете вибрати будь-який символ , який зазвичай не з'являється в першій позиції ( %
, @
, ?
, вибрати свій власний) і залишається порожнім псевдонім для нього:
histchars='!^%'
alias %=
Потім введіть цей символ, пробіл і вашу команду:
bash-4.3$ % echo !!
!!
(Ви не зможете не записати команду , де історія заміна була відключена , хоча. Також зверніть увагу , що за замовчуванням третій характером $histchars
є #
таким , що розширення історії не робиться в коментарях. Якщо ви зміните його, і ви вводите коментарі на підкажіть, вам слід знати про те, що послідовності !, там можуть бути розширені).