wake-up-neo.com

터미널에서 선행 느낌표를 무시할 수 있습니까? (ipython으로 인해 본능적으로 입력합니다)

IPython Shell에서 대부분의 시간을 보내므로 느낌표가있는 터미널 명령 앞에 나쁜 습관이 있습니다. 일반적으로 이것은 오류로 이어지지 만 때로는 나쁜 일이 발생하기도합니다. 효과적으로 ! 터미널 기능이 있습니까? 그리고이 위험이 스크립트를 방해합니까?

24
Zorgoth

대화식 쉘에서는 기본적으로 !가 히스토리 확장에 사용됩니다. 쉘은 ! 다음에있는 텍스트와 일치하는 명령을 찾아서 실행합니다. this answer ~ bash에서 느낌표 (!)를 사용할 수 없습니까? 에 표시된대로 쉘은 히스토리 확장을 비활성화 할 수 있습니다.

  • 배쉬 : set +H
  • Zsh : set -K

느낌표로 구동되는 히스토리 확장을 사용하지 않으려는 경우이를 쉘의 시작 스크립트에 추가 할 수 있습니다.

이로 인해 !는 무시되지 않지만 기록에서 명령을 실행하지 않아도됩니다. !command!command가 존재하지 않는다고 불평합니다.

쉘 스크립트는 이러한 설정의 영향을받지 않으며 비 대화식 구성 (기본적으로 히스토리 확장은 포함되지 않음)으로 자체 쉘을 갖습니다.

32
Stephen Kitt

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 초 후 또는 다른 것을 입력하면 더 빨리).

5
Stéphane Chazelas