目标: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")