사용자가 "less"를 종료할 때까지 스크립트 실행을 일시 중지합니다.

사용자가 "less"를 종료할 때까지 스크립트 실행을 일시 중지합니다.

표적: less콘텐츠(변수에서)를 입력한 다음 사용자에게 콘텐츠를 파일(예: .recovered_object) 에 저장해야 하는지 묻습니다.그 후에야사용자가 로그아웃합니다 less.

내 스크립트에서 발췌한 내용은 다음과 같습니다.

...
    # Show each blob until one is chosen
    counter=1
    while IFS='' read sha; do
        printf "Showing blob %d of %d" "$counter" "$BLOB_COUNT"
        contents=$(git show ${sha})
        ${PAGER:-less} ${contents}
        if read -q '?Save and quit (y/n) ?'; then
            echo "$contents" > .recovered_object
            exit 0
        else
            ((counter++))
        fi
    done <<< ${DANGLING_BLOBS_SHA}

    exit 0

현재로서는 키를 누르면( 제외 y) 다음 파일로 이동합니다... 하지만 이렇게 하면 사용자가 위로 스크롤( k)하거나 아래로 스크롤( )하거나 다른 키맵을 j사용하는 것을 방지할 수 있습니다!less

if이 블록이 즉시 실행되는 것을 어떻게 방지할 수 있나요 ?


추신: 저는 일반적으로 쉘 스크립팅을 처음 접하는 사람이므로 어떤 조언이라도 환영합니다.

PSS: 사용하고 있지만 원하는 사용자 경험을 달성하는 데 더 도움이 된다면 zsh로 전환하는 데 반대하지 않습니다 .bash

답변1

-f플래그(또는 )와 함께 프로세스 대체를 사용하는 것이 --force작동하는 것 같습니다.

${PAGER:-less} -f <(echo "$contents")

관련 정보