2 # Desc: Reads stdin and positional arguments
4 yell
() { echo "$0: $*" >&2; } # print script path and all args to stderr
5 die
() { yell
"$*"; exit 111; } # same as yell() but non-zero exit status
6 must
() { "$@" || die
"cannot $*"; } # runs args as command, reports args if command fails
8 # Desc: Consumes stdin and reads arguments; outputs as stdout lines
9 # Input: stdin (consumes)
11 # Output: stdout (newline delimited)
12 # Example: read_stdin_psarg "$@"
13 # Depends: GNU bash (version 5.1.16)
15 local input_stdin input_psarg output
;
18 if [[ -p /dev
/stdin
]]; then
19 input_stdin
="$(cat -)";
21 yell
"DEBUG:$(declare -p input_stdin)";
24 if [[ $# -gt 0 ]]; then
27 yell
"DEBUG:$(declare -p input_psarg)";
29 # Combine as output array elements
31 if [[ -n $input_stdin ]]; then
32 while read -r line
; do
34 done < <(printf "%s\n" "$input_stdin");
36 ## Read in positional arguments
37 if [[ -n $input_psarg ]]; then
42 yell
"DEBUG:$(declare -p output)";
45 printf "%s\n" "${output[@]}";
46 }; # read stdin and positional argument to stdout lines
48 read_stdin_psarg
"$@";