gbash

Bash

Bash conformance coverage based on the OILS spec test corpus.

gbash is evaluated against the OILS spec test corpus, comparing output against a pinned version of bash. Tests are grouped by upstream spec file.

Generated April 9, 2026 at 8:19 AM.

Pass Rate

97.15%

2355 passing of 2424 in-scope tests

Known Failures

69

expected failures across 117 spec files

Spec Files

117

2447 total test cases, 23 skipped

Coverage Per Spec File

Expand files with known failures to inspect individual test status. Green indicates passing, amber indicates an expected failure (xfail), and gray indicates a skipped test excluded from the pass rate.

alias.test.sh43 / 5 / 0
48 tests
TestStatus
Alias that is && || ;

conformance: gbash behavior differs from bash(darwin only)

xfail
Alias that is pipeline

conformance: gbash behavior differs from bash(darwin only)

xfail
alias with word of multiple lines

conformance: gbash behavior differs from bash(darwin only)

xfail
Two aliases in pipeline

conformance: gbash behavior differs from bash(darwin only)

xfail
unalias -a

conformance: gbash behavior differs from bash(darwin only)

xfail
append.test.sh20 / 0 / 0
20 tests
arg-parse.test.sh3 / 0 / 0
3 tests
arith-context.test.sh16 / 0 / 0
16 tests
arith-div-zero.test.sh5 / 0 / 0
5 tests
arith-dynamic.test.sh4 / 0 / 0
4 tests
arith.test.sh74 / 0 / 0
74 tests
array-assign.test.sh9 / 2 / 0
11 tests
TestStatus
More fragments like a[ a[5 a[5 + a[5 + 3]

conformance: gbash behavior differs from bash(darwin only)

xfail
Multiple LHS array words

conformance: gbash behavior differs from bash(darwin only)

xfail
array-assoc.test.sh42 / 0 / 0
42 tests
array-basic.test.sh5 / 0 / 0
5 tests
array-compat.test.sh12 / 0 / 0
12 tests
array-literal.test.sh19 / 0 / 0
19 tests
array-sparse.test.sh35 / 0 / 0
35 tests
array.test.sh78 / 0 / 0
78 tests
assign-deferred.test.sh9 / 0 / 0
9 tests
assign-dialects.test.sh4 / 0 / 0
4 tests
assign-extended.test.sh39 / 0 / 0
39 tests
assign.test.sh48 / 0 / 0
48 tests
ble-features.test.sh9 / 0 / 0
9 tests
ble-idioms.test.sh26 / 0 / 0
26 tests
ble-unset.test.sh5 / 0 / 0
5 tests
blog1.test.sh9 / 0 / 0
9 tests
blog2.test.sh8 / 0 / 0
8 tests
bool-parse.test.sh8 / 0 / 0
8 tests
brace-expansion.test.sh54 / 1 / 0
55 tests
TestStatus
Tilde expansion come before var expansion

conformance: gbash behavior differs from bash(darwin only)

xfail
bugs.test.sh28 / 1 / 0
29 tests
TestStatus
#2640 Hanging when reading from character devices

conformance: Darwin bash oracle lacks GNU coreutils timeout for this character-device regression(darwin only)

xfail
builtin-bash.test.sh14 / 0 / 0
14 tests
builtin-bracket.test.sh52 / 0 / 0
52 tests
builtin-cd.test.sh26 / 1 / 1
28 tests, 1 skipped
TestStatus
chdir is a synonym for cd - busybox ash

conformance: restored upstream bash coverage exposes gbash behavior that still differs from bash(darwin, linux only)

xfail
Survey of getcwd() syscall

platform-specific: test requires strace (Linux-only) and syscall behavior varies by platform

skip
builtin-completion.test.sh47 / 3 / 1
51 tests, 1 skipped
TestStatus
compgen -A user

platform-specific: gbash uses sandbox-visible passwd data instead of the host account database

skip
compgen -f -X filter -- $cur

conformance: gbash behavior differs from bash(darwin only)

xfail
compgen -W words -X filter

conformance: gbash behavior differs from bash(darwin only)

xfail
compgen doesn't respect -X for user-defined functions

conformance: gbash behavior differs from bash(darwin only)

xfail
builtin-dirs.test.sh18 / 0 / 0
18 tests
builtin-echo.test.sh26 / 0 / 0
26 tests
builtin-enable.test.sh3 / 0 / 0
3 tests
builtin-eval-source.test.sh24 / 0 / 0
24 tests
builtin-getopts.test.sh30 / 1 / 0
31 tests
TestStatus
OPTIND narrowed down

conformance: current spec expectation conflicts with the neighboring getopts state-tracking cases(darwin, linux only)

xfail
builtin-meta-assign.test.sh11 / 0 / 0
11 tests
builtin-meta.test.sh17 / 1 / 0
18 tests
TestStatus
command -v doesn't find executable dir

conformance: gbash behavior differs from bash(darwin only)

xfail
builtin-misc.test.sh6 / 1 / 0
7 tests
TestStatus
time pipeline

conformance: gbash behavior differs from bash(darwin only)

xfail
builtin-printf.test.sh63 / 0 / 0
63 tests
builtin-process.test.sh5 / 1 / 20
26 tests, 20 skipped
TestStatus
arg that would overflow 64 bits is detected

gbash does not implement process tables

skip
Changing resource limit is denied

gbash does not implement process tables

skip
exec -- 2>&1

gbash does not implement process tables

skip
exec -a sets argv[0]

gbash does not implement process tables

skip
exec builtin accepts --

gbash does not implement process tables

skip
exec builtin with here doc

conformance: restored upstream bash coverage still expects a spec/bin helper path our harness does not mirror yet(darwin, linux only)

xfail
Exit builtin with invalid arg

gbash does not implement process tables

skip
Exit builtin with too many args

gbash does not implement process tables

skip
time with brace group argument

gbash does not implement process tables

skip
ulimit -f 1 prevents files larger 512 bytes

gbash does not implement process tables

skip
ulimit -n limits file descriptors

gbash does not implement process tables

skip
ulimit -S for soft limit (default), -H for hard limit

gbash does not implement process tables

skip
ulimit accepts 'unlimited'

gbash does not implement process tables

skip
ulimit doesn't accept multiple flags - reduce confusion between shells

gbash does not implement process tables

skip
ulimit negative arg

gbash does not implement process tables

skip
ulimit negative flag

gbash does not implement process tables

skip
ulimit of 2**32, 2**31 (int overflow)

gbash does not implement process tables

skip
ulimit that is 64 bits

gbash does not implement process tables

skip
ulimit too many args

gbash does not implement process tables

skip
ulimit with no flags is like -f

gbash does not implement process tables

skip
write big file with ulimit

gbash does not implement process tables

skip
builtin-read.test.sh65 / 0 / 1
66 tests, 1 skipped
TestStatus
read bash bug

intentional: gbash keeps the space-preserving result instead of reproducing bash's historical control-character bug

skip
builtin-set.test.sh22 / 2 / 0
24 tests
TestStatus
set -u with undefined var in interactive shell does NOT exit the interpreter

conformance: gbash behavior differs from bash(darwin only)

xfail
set -u with undefined variable exits the interpreter

conformance: gbash behavior differs from bash(darwin only)

xfail
builtin-special.test.sh12 / 0 / 0
12 tests
builtin-times.test.sh0 / 1 / 0
1 tests
TestStatus
times shows two formatted lines

conformance: gbash behavior differs from bash(darwin only)

xfail
builtin-trap-bash.test.sh22 / 1 / 0
23 tests
TestStatus
trap DEBUG and pipeline (lastpipe difference)

conformance: gbash behavior differs from bash(darwin only)

xfail
builtin-trap-err.test.sh21 / 2 / 0
23 tests
TestStatus
trap ERR with redirect

conformance: current spec expectation differs from bash-compatible redirect ERR line accounting(darwin, linux only)

xfail
trap ERR with YSH proc

conformance: restored upstream bash coverage exposes gbash behavior that still differs from bash(darwin, linux only)

xfail
builtin-trap.test.sh29 / 4 / 0
33 tests
TestStatus
Remove trap with an unsigned integer

conformance: restored upstream bash coverage exposes gbash behavior that still differs from bash(darwin, linux only)

xfail
trap USR1, sleep, SIGINT: non-interactively

conformance: gbash behavior differs from bash(darwin only)

xfail
trap with command.NoOp - check internal invariant

conformance: gbash behavior differs from bash(darwin only)

xfail
traps are not active inside subshells $() () trap | cat

conformance: gbash behavior differs from bash(darwin only)

xfail
builtin-type-bash.test.sh26 / 5 / 0
31 tests
TestStatus
type -a -> builtin

conformance: gbash behavior differs from bash(darwin only)

xfail
type -ap -> builtin

conformance: gbash behavior differs from bash(darwin only)

xfail
type -P builtin -> not a file

conformance: gbash behavior differs from bash(darwin only)

xfail
type -P builtin -> not a file but file found

conformance: gbash behavior differs from bash(darwin only)

xfail
type -P does not find directories (regression)

conformance: gbash behavior differs from bash(darwin only)

xfail
builtin-type.test.sh6 / 0 / 0
6 tests
builtin-umask.test.sh24 / 0 / 0
24 tests
builtin-vars.test.sh41 / 0 / 0
41 tests
case_.test.sh13 / 0 / 0
13 tests
command_.test.sh15 / 1 / 0
16 tests
TestStatus
Command block

conformance: gbash behavior differs from bash(darwin only)

xfail
command-parsing.test.sh5 / 0 / 0
5 tests
command-sub.test.sh30 / 0 / 0
30 tests
comments.test.sh2 / 0 / 0
2 tests
dbracket.test.sh49 / 0 / 0
49 tests
divergence.test.sh3 / 1 / 0
4 tests
TestStatus
builtin cat crashes a subshell (#2530)

conformance: Darwin bash oracle lacks /usr/bin/cat inside this harness(darwin only)

xfail
dparen.test.sh15 / 0 / 0
15 tests
empty-bodies.test.sh3 / 0 / 0
3 tests
errexit.test.sh34 / 1 / 0
35 tests
TestStatus
More && ||

conformance: gbash behavior differs from bash(darwin only)

xfail
exit-status.test.sh11 / 0 / 0
11 tests
explore-parsing.test.sh5 / 0 / 0
5 tests
extglob-files.test.sh21 / 1 / 0
22 tests
TestStatus
no match

conformance: restored upstream bash coverage exposes gbash behavior that still differs from bash(darwin, linux only)

xfail
extglob-match.test.sh29 / 0 / 0
29 tests
fatal-errors.test.sh2 / 3 / 0
5 tests
TestStatus
Unrecoverable: divide by zero in case

conformance: gbash behavior differs from bash(darwin only)

xfail
Unrecoverable: divide by zero in conditional word

conformance: gbash behavior differs from bash(darwin only)

xfail
Unrecoverable: divide by zero in redirect word

conformance: gbash behavior differs from bash(darwin only)

xfail
for-expr.test.sh9 / 0 / 0
9 tests
func-parsing.test.sh15 / 0 / 0
15 tests
glob-bash.test.sh10 / 0 / 0
10 tests
glob.test.sh39 / 1 / 0
40 tests
TestStatus
Glob ordering respects LC_COLLATE (zsh respects this too)

conformance: restored upstream bash coverage exposes gbash behavior that still differs from bash(linux only)

xfail
globignore.test.sh16 / 2 / 0
18 tests
TestStatus
Ignore globs with char patterns like [!ab]

conformance: gbash behavior differs from bash(darwin only)

xfail
When GLOBIGNORE is set, no_dash_glob isn't respected

conformance: restored upstream bash coverage exposes gbash behavior that still differs from bash(darwin, linux only)

xfail
globstar.test.sh4 / 1 / 0
5 tests
TestStatus
in zsh, ***/ follows symlinked directories, while **/ does not

conformance: restored upstream bash coverage exposes gbash behavior that still differs from bash(darwin, linux only)

xfail
here-doc.test.sh34 / 0 / 0
34 tests
if_.test.sh5 / 0 / 0
5 tests
introspect.test.sh15 / 0 / 0
15 tests
known-differences.test.sh2 / 0 / 0
2 tests
let.test.sh2 / 0 / 0
2 tests
loop.test.sh29 / 0 / 0
29 tests
nameref.test.sh33 / 0 / 0
33 tests
nix-idioms.test.sh6 / 0 / 0
6 tests
nocasematch-match.test.sh6 / 0 / 0
6 tests
nul-bytes.test.sh16 / 0 / 0
16 tests
paren-ambiguity.test.sh9 / 0 / 0
9 tests
parse-errors.test.sh24 / 3 / 0
27 tests
TestStatus
interactive parse error (regression)

conformance: gbash behavior differs from bash(darwin only)

xfail
Long Token - 65535 bytes

conformance: Darwin wc still differs from GNU bash harness behavior for this case(darwin only)

xfail
Token that's too long for Oils - 65536 bytes

conformance: Darwin wc still differs from GNU bash harness behavior for this case(darwin only)

xfail
pipeline.test.sh21 / 5 / 0
26 tests
TestStatus
Evaluation of argv[0] in pipeline occurs in child

conformance: gbash behavior differs from bash(darwin only)

xfail
Nested pipelines

conformance: gbash behavior differs from bash(darwin only)

xfail
Pipeline in eval

conformance: gbash behavior differs from bash(darwin only)

xfail
Redirect in Pipeline

conformance: gbash behavior differs from bash(darwin only)

xfail
shopt -s lastpipe and shopt -s no_last_fork interaction

conformance: gbash behavior differs from bash(darwin only)

xfail
print-source-code.test.sh4 / 0 / 0
4 tests
process-substitution.test.sh4 / 0 / 0
4 tests
quote.test.sh35 / 0 / 0
35 tests
redirect-command.test.sh21 / 2 / 0
23 tests
TestStatus
Brace group redirect

conformance: gbash behavior differs from bash(darwin only)

xfail
redirect bash extensions: [[ (( for ((

conformance: gbash behavior differs from bash(darwin only)

xfail
redirect-multi.test.sh12 / 1 / 0
13 tests
TestStatus
ysh behavior when glob doesn't match

conformance: restored upstream bash coverage exposes gbash behavior that still differs from bash(darwin, linux only)

xfail
redirect.test.sh43 / 1 / 0
44 tests
TestStatus
Redirect echo to stderr, and then redirect all of stdout somewhere.

conformance: gbash behavior differs from bash(darwin only)

xfail
regex.test.sh34 / 2 / 0
36 tests
TestStatus
Operator chars ; & but not |

conformance: gbash behavior differs from bash(darwin only)

xfail
Unquoted { is a regex parse error

conformance: gbash behavior differs from bash(darwin only)

xfail
serialize.test.sh10 / 0 / 0
10 tests
sh-func.test.sh12 / 0 / 0
12 tests
sh-options-bash.test.sh7 / 1 / 0
8 tests
TestStatus
OSH calling bash with SHELLOPTS does not change braceexpand

conformance: gbash behavior differs from bash(darwin only)

xfail
smoke.test.sh14 / 4 / 0
18 tests
TestStatus
failed command

conformance: gbash behavior differs from bash(darwin only)

xfail
Here doc with redirect

conformance: gbash behavior differs from bash(darwin only)

xfail
pipeline

conformance: gbash behavior differs from bash(darwin only)

xfail
pipeline with builtin

conformance: gbash behavior differs from bash(darwin only)

xfail
strict-options.test.sh17 / 0 / 0
17 tests
subshell.test.sh2 / 0 / 0
2 tests
temp-binding.test.sh4 / 0 / 0
4 tests
tilde.test.sh12 / 3 / 0
15 tests
TestStatus
~ expansion in readonly assignment

conformance: gbash behavior differs from bash(darwin only)

xfail
No tilde expansion in word that looks like assignment but isn't

conformance: restored upstream bash coverage exposes gbash behavior that still differs from bash(darwin, linux only)

xfail
strict tilde

conformance: restored upstream bash coverage exposes gbash behavior that still differs from bash(darwin, linux only)

xfail
type-compat.test.sh7 / 0 / 0
7 tests
unicode.test.sh6 / 1 / 0
7 tests
TestStatus
OSH source code doesn't have to be valid Unicode (like other shells)

conformance: restored upstream bash coverage exposes gbash behavior that still differs from bash(darwin, linux only)

xfail
var-op-bash.test.sh27 / 0 / 0
27 tests
var-op-len.test.sh9 / 0 / 0
9 tests
var-op-patsub.test.sh28 / 0 / 0
28 tests
var-op-slice.test.sh22 / 0 / 0
22 tests
var-op-strip.test.sh29 / 0 / 0
29 tests
var-op-test.test.sh37 / 0 / 0
37 tests
var-ref.test.sh31 / 0 / 0
31 tests
var-sub-quote.test.sh41 / 0 / 0
41 tests
var-sub.test.sh6 / 0 / 0
6 tests
vars-bash.test.sh0 / 1 / 0
1 tests
TestStatus
$SHELL is set to what is in /etc/passwd

conformance: gbash behavior differs from bash(darwin only)

xfail
vars-special.test.sh40 / 2 / 0
42 tests
TestStatus
$HOME is NOT set

conformance: gbash behavior differs from bash(darwin only)

xfail
Vars set interactively only: $HISTFILE

conformance: gbash behavior differs from bash(darwin only)

xfail
whitespace.test.sh5 / 0 / 0
5 tests
word-eval.test.sh8 / 0 / 0
8 tests
word-split.test.sh55 / 0 / 0
55 tests
xtrace.test.sh19 / 0 / 0
19 tests