From 74b2e5ef0ae9de6ec28e5aa71d3d20b83b131404 Mon Sep 17 00:00:00 2001 From: Connor Olding Date: Mon, 22 Jul 2024 04:47:31 -0700 Subject: [PATCH] implement new shell compatibility markers --- sh/recombine | 28 +++++++++++++++------------- 1 file changed, 15 insertions(+), 13 deletions(-) diff --git a/sh/recombine b/sh/recombine index 594dd40..5c190a6 100644 --- a/sh/recombine +++ b/sh/recombine @@ -4,18 +4,18 @@ cd ~/sh && unset IFS || exit [ -z "${0##/*}" ] && sh=zsh || sh="${0#-}" # zsh replaces $0, so hardcode it case "$sh" in -(ash) SH=ASH;; -(bash) SH=BASH;; -(dash) SH=DASH;; -(hush) SH=HUSH;; -(ksh) SH=KSH;; -(loksh) SH=OKSH;; # similar enough to oksh to use the same compatibility flag -(mksh) SH=MKSH;; -(oksh) SH=OKSH;; -(osh) SH=OSH;; -(posh) SH=POSH;; -(yash) SH=YASH;; -(zsh) SH=ZSH; set -o SH_WORD_SPLIT;; +(ash) SH=ASH c=ash;; +(bash) SH=BASH c=bash;; +(dash) SH=DASH c=dash;; +(hush) SH=HUSH c=hush;; +(ksh) SH=KSH c=ksh;; +(loksh) SH=OKSH c=oksh;; # similar enough to oksh to use the same compatibility flag +(mksh) SH=MKSH c=mksh;; +(oksh) SH=OKSH c=oksh;; +(osh) SH=OSH c=osh;; +(posh) SH=POSH c=posh;; +(yash) SH=YASH c=yash;; +(zsh) SH=ZSH c=zsh; set -o SH_WORD_SPLIT;; (*) printf >&2 %s\\n "unknown shell (\$0): $0" exit 1 @@ -26,8 +26,10 @@ for f in "${HOME:?}/sh"/*; do [ -n "${f##*.*}" ] && [ -f "$f" ] || continue i=10 sh= while IFS= read -r line; do + check=0 for word in $line; do - case "$word" in (YES_$SH) sh=1;; (NO_$SH) sh=0;; esac + case "$word" in (YES_$SH) sh=1;; (NO_$SH) sh=0;; (compat:) check=1;; esac + [ "$check" != 1 ] || case "$word" in (+$c) sh=1;; (-$c) sh=0;; esac done [ "$((i-=1))" != 0 ] || break # act like head -n10 done < "$f"