Red Hat Linux에서 "Ctrl + L"을 사용하여 ksh 화면을 지우는 방법은 무엇입니까?

Red Hat Linux에서 "Ctrl + L"을 사용하여 ksh 화면을 지우는 방법은 무엇입니까?

퍼티를 사용하여 Red Hat Linux 서버에 연결하고 있습니다. Linux에서 내 쉘은 Korn 쉘입니다. 화면을 지우려면 "Ctrl + l" 조합을 사용하는 데 익숙합니다. 이 콤보가 Ksh에서 작동하지 않는 몇 가지 이유. ksh에 ""를 입력 하면 ctrl + l새 줄로 이동합니다.

나는 노력했다

alias "^L"=clear

여전히 같은 결과입니다.

나도 시도했다

bind -m '^L'=clear'^J'

그런데 바인드 명령을 찾을 수 없다고 뜹니다. 컴퓨터에 새로운 것을 설치할 수 없습니다.

이 문제를 해결하는 방법을 제안해 주실 수 있나요? 감사해요.

답변1

Red Hat은 명령이 없는 "ksh-93"을 제공합니다 bind. 이는 특수 기능을 통해 트리거되는 KEYBD이름 을 제공합니다 . trap매뉴얼 페이지에 따르면 수정하는 데 사용할 수 있습니다.Emacs 편집 모드.

예제는 다음 위치에 있습니다.[Korn Shell] Home, End, pgup, pgdown 및 삭제 키 수정^L화면을 깨끗하게 만드는 방법을 보여주는 유용한 시작점입니다. 기본적으로 metacontrolL( ^[^L)는 화면 지우기 기능에 바인딩되어 있으며 일반은 ^L변경하려는 다음 줄입니다.

   ^L        Line feed and print current line.
   M-^L      Clear the screen.

요청한 내용을 수행하려면 예제에 한 줄만 추가하면 됩니다.

set -o emacs

keybd_trap () {
  case ${.sh.edchar} in
    $'\f')    .sh.edchar=$'\e\f';;  # clear-screen (THIS QUESTION)
    $'\e[1~') .sh.edchar=$'\001';;  # Home = beginning-of-line
    $'\e[4~') .sh.edchar=$'\005';;  # End = end-of-line
    $'\e[5~') .sh.edchar=$'\e>';;   # PgUp = history-previous
    $'\e[6~') .sh.edchar=$'\e<';;   # PgDn = history-next
    $'\e[3~') .sh.edchar=$'\004';;  # Delete = delete-char
  esac
}
trap keybd_trap KEYBD

어떤 이유로든 vi 모드는 ksh.

키가 실제로 기능에 어떻게 매핑되는지에 대한 문서가 모호합니다. 이 예에서는 기능이 src/cmd/ksh93/edit/emacs.c스위치/케이스 문의 일부로 구현됩니다.

#ifdef _cmd_tput
                case cntl('L'): /* clear screen */
                        sh_trap("tput clear", 0);
                        draw(ep,REFRESH);
                        return(-1);
#endif

이스케이프 기능(즉, "메타" 처리)에서. 따라서 사용자 정의할 수 있는 기본 제공 동작입니다.

추가 자료:

Q4. 키바인딩은 어떻게 이루어지나요?
A4. ksh93은 키를 누를 때마다 실행되는 KEYBD 트랩을 제공합니다.
    키보드로 입력됩니다. 이 함정을 사용하고 공범자
    ksh93의 배열 기능은 키 바인딩 기능을 쉽게 작성할 수 있습니다.
    입력된 키 시퀀스를 다른 키 시퀀스에 매핑합니다.

관련 정보