IPython Shell에서 대부분의 시간을 보내므로 느낌표가있는 터미널 명령 앞에 나쁜 습관이 있습니다. 일반적으로 이것은 오류로 이어지지 만 때로는 나쁜 일이 발생하기도합니다. 효과적으로 !
터미널 기능이 있습니까? 그리고이 위험이 스크립트를 방해합니까?
대화식 쉘에서는 기본적으로 !
가 히스토리 확장에 사용됩니다. 쉘은 !
다음에있는 텍스트와 일치하는 명령을 찾아서 실행합니다. this answer ~ bash에서 느낌표 (!)를 사용할 수 없습니까? 에 표시된대로 쉘은 히스토리 확장을 비활성화 할 수 있습니다.
set +H
set -K
느낌표로 구동되는 히스토리 확장을 사용하지 않으려는 경우이를 쉘의 시작 스크립트에 추가 할 수 있습니다.
이로 인해 !
는 무시되지 않지만 기록에서 명령을 실행하지 않아도됩니다. !command
는 !command
가 존재하지 않는다고 불평합니다.
쉘 스크립트는 이러한 설정의 영향을받지 않으며 비 대화식 구성 (기본적으로 히스토리 확장은 포함되지 않음)으로 자체 쉘을 갖습니다.
zsh
Shell을 사용하는 경우 ~/.zshrc
:
zmodload zsh/zselect
bang() {
zle self-insert
if [[ $CONTEXT = start && $LBUFFER =~ '^!+$' ]]; then
local -a old_region_highlight=($region_highlight)
region_highlight+=("0 $CURSOR fg=red,bg=white,bold,standout")
zle -R 'Will you please stop?!'
zselect -t 100 -r 0 < /dev/tty
region_highlight=($old_region_highlight)
LBUFFER=
fi
}
zle -N bang
bindkey '!' bang
하나 이상을 입력하면 !
편집 버퍼의 시작 부분에서 빨간색으로 강조 표시되고 메시지를 표시 한 후 제거합니다 (1 초 후 또는 다른 것을 입력하면 더 빨리).