계속하려면 Enter 키를 누르세요.

계속하려면 Enter 키를 누르세요.

Enter사용자가 명령을 사용하지 않고 키를 누를 때까지 스크립트를 중지할 수 있는 방법이 있는지 궁금합니다 . read옵션만 전달하면 됩니다 stty.

이에 대한 코드가 궁금해서 검색을 좀 해보니 계속하려면 "공백"이 필요한 코드를 찾았고 hold변수를 빈 공간에서 로 변경했지만 \n성공하지 못했습니다.

다음과 같습니다.

function _enter-to-continue() {
    local hold='\n'        # this solution i tried, but without success

    printf "Press 'ENTER' to continue or 'ESC' to cancel... "
    local original_tty_state=$(stty -g)
    trap "stty $original_tty_state; exit 0" 2
    stty intr \033

    stty raw isig noflsh echo icrnl

    until [ -z "${hold#$in}" ]; do
        in=$(dd bs=1 count=1 </dev/tty 2>/dev/null)
    done

    stty "$original_tty_state"
}

답변1

나는 질문을 충분히 철저하게 읽지 않았다는 것을 인정해야 합니다. 한 가지 이유는 귀하의 의도가 터미널 설정과 전혀 관련이 없지만 icrnl어쨌든 기본값이기 때문입니다.

[ -z "${hold#$in}" ][ "$in" = ' ' ]or 을 말하는 다소 이상한 방법입니다 [ "$hold" = "$in" ]. 문제 또는 코드가 $(cmd)후행 줄 바꿈을 제거하고 있습니다. 여러분이 기다리고 있는 것은 개행 문자뿐입니다. 따라서 원하는 문자는 테스트 코드에 도달하지 않습니다. 당신은해야합니다

in=$(dd bs=1 count=1 </dev/tty 2>/dev/null; echo x)
in="${in%x}"

또 다른 질문은 입니다 local hold='\n'. 그것은 작동하지 않습니다. C가 아닙니다. 당신은해야합니다

hold='
'
# or
hold=$'\n'

Enter아무것도 기다리지 마세요read

head -n 1 >/dev/null

이는 전체 until루프를 대체하지만 개행에서만 가능합니다.

관련 정보