Created
April 23, 2025 05:31
-
-
Save sandcastle/1e3b103cc70d29fc14c0da08abca88c1 to your computer and use it in GitHub Desktop.
Revisions
-
sandcastle created this gist
Apr 23, 2025 .There are no files selected for viewing
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters. Learn more about bidirectional Unicode charactersOriginal file line number Diff line number Diff line change @@ -0,0 +1,83 @@ ========== bash ========== --- plain mode (bash ) --- HAS_PIPEFAIL = 1 HAS_ARRAY = 1 HAS_EUO = 1 HAS_EVAL = 1 HAS_ASSOC_ARRAY = 1 HAS_DBLBRACK = 1 --- interactive mode (bash -i) --- HAS_PIPEFAIL = 1 HAS_ARRAY = 1 HAS_EUO = 1 HAS_EVAL = 1 HAS_ASSOC_ARRAY = 1 HAS_DBLBRACK = 1 --- login+interactive mode (bash -il) --- Welcome to Cloud Shell! Type "help" to get started. To set your Cloud Platform project in this session use `gcloud config set project [PROJECT_ID]`. You can view your projects by running `gcloud projects list`. HAS_PIPEFAIL = 1 HAS_ARRAY = 1 HAS_EUO = 1 HAS_EVAL = 1 HAS_ASSOC_ARRAY = 1 HAS_DBLBRACK = 1 ========== zsh ========== --- plain mode (zsh ) --- HAS_PIPEFAIL = 1 HAS_ARRAY = 0 HAS_EUO = 1 HAS_EVAL = 1 HAS_ASSOC_ARRAY = 1 HAS_DBLBRACK = 1 --- interactive mode (zsh -i) --- HAS_PIPEFAIL = 1 HAS_ARRAY = 0 HAS_EUO = 1 HAS_EVAL = 1 HAS_ASSOC_ARRAY = 1 HAS_DBLBRACK = 1 --- login+interactive mode (zsh -il) --- HAS_PIPEFAIL = 1 HAS_ARRAY = 0 HAS_EUO = 1 HAS_EVAL = 1 HAS_ASSOC_ARRAY = 1 HAS_DBLBRACK = 1 ========== sh ========== --- plain mode (sh ) --- HAS_PIPEFAIL = 1 HAS_ARRAY = 1 HAS_EUO = 1 HAS_EVAL = 1 HAS_ASSOC_ARRAY = 1 HAS_DBLBRACK = 1 --- interactive mode (sh -i) --- HAS_PIPEFAIL = 1 HAS_ARRAY = 1 HAS_EUO = 1 HAS_EVAL = 1 HAS_ASSOC_ARRAY = 1 HAS_DBLBRACK = 1 --- login+interactive mode (sh -il) --- Welcome to Cloud Shell! Type "help" to get started. To set your Cloud Platform project in this session use `gcloud config set project [PROJECT_ID]`. You can view your projects by running `gcloud projects list`. HAS_PIPEFAIL = 1 HAS_ARRAY = 1 HAS_EUO = 1 HAS_EVAL = 1 HAS_ASSOC_ARRAY = 1 HAS_DBLBRACK = 1 This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters. Learn more about bidirectional Unicode charactersOriginal file line number Diff line number Diff line change @@ -0,0 +1,49 @@ tee x.sh >/dev/null <<'EOF' #!/usr/bin/env sh # ── probe six core capabilities (each one-liner is side-effect free) ── ( set -o pipefail ) 2>/dev/null && HAS_PIPEFAIL=1 || HAS_PIPEFAIL=0 ( foo=(); foo[0]=x ) 2>/dev/null && HAS_ARRAY=1 || HAS_ARRAY=0 ( set -euo pipefail; : ) 2>/dev/null && HAS_EUO=1 || HAS_EUO=0 ( eval : ) 2>/dev/null && HAS_EVAL=1 || HAS_EVAL=0 ( typeset -A _A 2>/dev/null ) 2>/dev/null && HAS_ASSOC_ARRAY=1 || HAS_ASSOC_ARRAY=0 ( [[ 1 -eq 1 ]] ) 2>/dev/null && HAS_DBLBRACK=1 || HAS_DBLBRACK=0 printf 'HAS_PIPEFAIL = %s\n' "$HAS_PIPEFAIL" printf 'HAS_ARRAY = %s\n' "$HAS_ARRAY" printf 'HAS_EUO = %s\n' "$HAS_EUO" printf 'HAS_EVAL = %s\n' "$HAS_EVAL" printf 'HAS_ASSOC_ARRAY = %s\n' "$HAS_ASSOC_ARRAY" printf 'HAS_DBLBRACK = %s\n' "$HAS_DBLBRACK" EOF chmod +x x.sh # ─── driver that runs x.sh under bash, zsh, sh in plain/interactive/login ─── tee run-matrix.sh >/dev/null <<'EOF' #!/usr/bin/env bash PROBE="./x.sh" # script to test shells=(bash zsh sh) # add ksh, dash, etc. if desired modes=("" "-i" "-il") # plain, interactive, login+interactive mode_names=("plain" "interactive" "login+interactive") for shell in "${shells[@]}"; do command -v "$shell" >/dev/null 2>&1 || { echo "⏭ $shell not found"; continue; } printf '\n========== %s ==========\n' "$shell" for idx in "${!modes[@]}"; do mode="${modes[$idx]}" label="${mode_names[$idx]}" printf '\n--- %s mode (%s %s) ---\n' "$label" "$shell" "$mode" if [ -z "$mode" ]; then "$shell" "$PROBE" # plain script execution else "$shell" $mode "$PROBE" # -i x.sh or -il x.sh fi done done EOF chmod +x run-matrix.sh . run-matrix.sh