"Enter" 키 없이 사용자 입력 캡처

"Enter" 키 없이 사용자 입력 캡처

나는 다음과 같은 작업을 수행합니다.

이러한 스크립트는 사용자에게 매개변수를 묻는 메시지를 표시하고 최종적으로 해당 매개변수를 기반으로 특정 명령을 실행합니다. (먼저 파일 이름을 묻는 메시지를 표시한 다음 인수를 묻는 메시지를 표시하는 스크립트를 상상해 보십시오 chmod.)

문제는 스크립트가 특정 키 시퀀스에 의해 종료되어야 한다는 것입니다(예: 사용자가 Ctrl"-" 를 입력하지 않고 "halt"를 입력하는 경우 C).

답변1

readwith를 사용하여 -n 1문자별로 읽고 읽은 문자열을 작성할 수 있습니다 . 그런 다음 각 캐릭터가 나타날 때 무엇을 할지 결정할 수 있습니다.

val=""
while read -n 1 char; do
    if [[ $char = "" ]]; then
        printf 'Got an enter and the string is %s' "$val"
        # do whatever else you want with it here
        val="" # reset it to get the next param
    else
        val="$val$char" # append input
    fi
    if [[ $val = "halt" ]]; then
        exit
    fi
done

답변2

작업 설명에 따르면 입력된 문자를 문자별로 처리하면 안 됩니다. 한줄씩 읽어보시면 됩니다. 문자별로 읽는 것은 도움이 되지 않습니다.

스크립트를 종료하는 것 외에 +로 아무것도 할 필요가 없다면 Ctrl아무것도 하지 마십시오. C이것이 기본 동작입니다.

Ctrl+에서 일부 사용자 정의 코드를 실행 해야 하는 경우 C(종료 스크립트로 끝날 수도 있고 끝나지 않을 수도 있음) 터미널 드라이버에 내장된 메커니즘이 있습니다. 이 키를 누르세요신호를 보내다 지능을 신호하다. 정의하다신호용.

cleanup () {
  … whatever you need to do before the script exits …
}
trap 'echo >&2 "Aborting"; cleanup; exit 130' INT
while IFS= read -r line; do
done

관련 정보