나는 다음과 같은 작업을 수행합니다.
이러한 스크립트는 사용자에게 매개변수를 묻는 메시지를 표시하고 최종적으로 해당 매개변수를 기반으로 특정 명령을 실행합니다. (먼저 파일 이름을 묻는 메시지를 표시한 다음 인수를 묻는 메시지를 표시하는 스크립트를 상상해 보십시오 chmod
.)
문제는 스크립트가 특정 키 시퀀스에 의해 종료되어야 한다는 것입니다(예: 사용자가 Ctrl"-" 를 입력하지 않고 "halt"를 입력하는 경우 C).
답변1
read
with를 사용하여 -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