暂停脚本执行,直到用户退出“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块立即运行?


PS:总的来说,我对 shell 脚本编写还很陌生,所以欢迎任何指点。

PSS:我正在使用,但如果这更有利于实现所需的用户体验,zsh我并不反对切换到。bash

答案1

-f使用带有标志 (also )的进程替换--force似乎有效:

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

相关内容