# dash-test.sh: POSIX shell checks for dash (Foundry OS, milestone M2). # The self-test runs it as `dash /mnt/disk0/scripts/dash-test.sh`. Each # check prints "dash-test: ok NAME" or "dash-test: FAIL NAME"; the exit # status is the number of failures. fails=0 checks=0 check() { # check NAME COMMAND... (passes when COMMAND succeeds) name=$1; shift checks=$((checks + 1)) if "$@"; then echo "dash-test: ok $name" else echo "dash-test: FAIL $name"; fails=$((fails + 1)); fi } eq() { [ "$1" = "$2" ] || { echo " got '$1', want '$2'"; return 1; }; } echo "dash-test: dash running, pid $$" x=6 check arithmetic eq "$((x * 7))" 42 s=; for i in 1 2 3; do s="$s$i"; done check for-loop eq "$s" 123 f() { echo "$#:$*"; return 3; } out=$(f a b c); st=$? check function-and-return eq "$out/$st" "3:a b c/3" case foo.txt in *.txt) c=yes ;; *) c=no ;; esac check case-glob eq "$c" yes n=0; for p in /mnt/disk0/bin/*; do n=$((n + 1)); done echo "dash-test: $n programs in /mnt/disk0/bin" check pipe-to-rust-grep eq "$(printf 'apple\nbanana\n' | grep ban)" banana echo "written by dash" > /tmp/dash-test.txt read line < /tmp/dash-test.txt check redirect-and-read eq "$line" "written by dash" cat /tmp/no-such-file 2>/dev/null; st=$? check missing-file-status [ "$st" -ne 0 ] heredoc=$(cat <