Чтобы иметь возможность отключить расширение истории в определенной командной строке, вы можете использовать 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
. Вы хотите тот, который не влияет на интерпретацию вашей команды. Несколько вариантов:
- использование backslash (
\
): \echo foo
работает, но имеет побочный эффект отключения псевдонимов или ключевых слов.
- TAB: чтобы вставить его в первую позицию, вам нужно нажать Ctrl+VTabхотя.
если вы не возражаете , набрав два ключа, вы можете выбрать любой символ , который обычно не появляется в первой позиции ( %
, @
, ?
, выбрать свой собственный) и сделать пустой псевдоним для него:
histchars='!^%'
alias %=
Затем введите этот символ, пробел и вашу команду:
bash-4.3$ % echo !!
!!
(Вы не сможете не записать команду, в которой подстановка истории была отключена. Также обратите внимание, что третий символ по умолчанию используется для того $histchars
, #
чтобы расширение истории не делалось в комментариях. Если вы измените его, и вы введете комментарии в подскажите, вы должны знать о том, что! последовательности могут быть расширены там).