
ターゲット: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:私は一般的にシェルスクリプトに初めて触れる人なので、どんなアドバイスでも大歓迎です。
PSS:使用していますが、希望するユーザーエクスペリエンスを達成するのに役立つ場合は、に切り替えることにzsh
反対しません。bash
答え1
-f
フラグ(または)と一緒にプロセスオーバーライドを使用するとうまくいく--force
ようです。
${PAGER:-less} -f <(echo "$contents")