Щоб вимкнути розширення історії в певному командному рядку, ви можете використовувати 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є #таким , що розширення історії не робиться в коментарях. Якщо ви зміните його, і ви вводите коментарі на підкажіть, вам слід знати про те, що послідовності !, там можуть бути розширені).