bash Ctrl+C를 재정의하여 물고기처럼 만드는 방법

bash Ctrl+C를 재정의하여 물고기처럼 만드는 방법

fish나는 bash가 내가 선호하는 쉘 임에도 불구하고 원격 컴퓨터에서 더 자주 사용하고 있음을 발견했습니다 . Fish에는 Ctrl+C를 누르면 다음과 같은 일이 발생하는 작지만 멋진 기능이 있습니다.

if command running
   send SIGINT
else
   clear line (don't start a new one)

bash에서 이 작업을 수행할 수 있으면 좋을 것 같습니다.

Ctrl+C를 누른 후 SIGINT를 보내도록 구성된 프로그램에서 SIGINT를 포착하는 것이 포함될 것이라고 생각 stty하지만 위의 의사 코드를 수행하는 방법을 찾지 못했습니다.

내가 시도한 것

trap 'tput dl1' SIGINT

줄을 지우지만 계속해서 새 줄/프롬프트를 시작합니다(빈 프롬프트에서 Enter 키를 누르는 것과 같음).오직기록을 탐색하지 않은 경우: \

답변1

글쎄, 좀 만지작거린 후에trap,tput그리고terminfo, 내 생각엔 내가 알아낸 것 같아 (다른 질문 주셔서 감사합니다).

단 한 줄만 있는 표준 명령줄의 경우, 예:bash-4.3$ echo something here

trap 'tput dl1; tput cuu1' SIGINT나에게 필요한 것입니다.

배쉬는 다음을 수행합니다:

  • 이 줄 삭제
  • 커서를 위로 이동

마지막으로 새 줄을 시작합니다(그래서커서를 위로 이동).

예를 들어 명령줄에 2개 이상의 줄이 있는 경우

name@host /path/to/some/dir
$ echo something here

tput dl1; tput cuu1그런 다음 여분의 줄을 제거하려면 다른 줄을 추가해야 합니다 -->trap 'tput dl1; tput cuu1; tput dl1; tput cuu1' SIGINT

나는 이것이 어떤 부정적인 영향을 미치는지 알아볼 것이라고 생각했습니다.

관련 정보