diff --git a/scripts/setup/machine-setup/lib/base.sh b/scripts/setup/machine-setup/lib/base.sh index 2549383c..22fae105 100644 --- a/scripts/setup/machine-setup/lib/base.sh +++ b/scripts/setup/machine-setup/lib/base.sh @@ -215,6 +215,21 @@ prompt_value() { fi } +# Show long output a screen at a time. +# +# Only when there is a terminal to page on: with output redirected or piped — +# a transcript, a log, the test harness — it has to come through whole, and a +# pager would either block or mangle it. `more` rather than `less` because it +# exits at the end of the file instead of sitting there waiting to be quit, +# which is what you want for something you asked to read once. +page() { + if [[ -t 1 ]] && command -v more &>/dev/null; then + more + else + cat + fi +} + # Ask before acting. Every section that changes the machine goes through this, so # a run is a sequence of things you agreed to rather than a wall of output you # read afterwards to find out what happened. @@ -255,7 +270,7 @@ confirm() { "?") if [[ -n "$help_fn" ]]; then echo "" - "$help_fn" + "$help_fn" | page echo "" else warn "Answer y or n." diff --git a/scripts/setup/machine-setup/machine-setup.sh b/scripts/setup/machine-setup/machine-setup.sh index 6929ecc7..c79b4953 100755 --- a/scripts/setup/machine-setup/machine-setup.sh +++ b/scripts/setup/machine-setup/machine-setup.sh @@ -470,7 +470,7 @@ if ! skip; then 3) TS_PLANE="tailscale" ;; "?") echo "" - tailscale_networks_help + tailscale_networks_help | page echo "" tailscale_network_menu ;;