Pass Rate
97.15%
2355 passing of 2424 in-scope tests
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
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.
| Test | Status |
|---|---|
Alias that is && || ;conformance: gbash behavior differs from bash(darwin only) | xfail |
Alias that is pipelineconformance: gbash behavior differs from bash(darwin only) | xfail |
alias with word of multiple linesconformance: gbash behavior differs from bash(darwin only) | xfail |
Two aliases in pipelineconformance: gbash behavior differs from bash(darwin only) | xfail |
unalias -aconformance: gbash behavior differs from bash(darwin only) | xfail |
| Test | Status |
|---|---|
More fragments like a[ a[5 a[5 + a[5 + 3]conformance: gbash behavior differs from bash(darwin only) | xfail |
Multiple LHS array wordsconformance: gbash behavior differs from bash(darwin only) | xfail |
| Test | Status |
|---|---|
Tilde expansion come before var expansionconformance: gbash behavior differs from bash(darwin only) | xfail |
| Test | Status |
|---|---|
#2640 Hanging when reading from character devicesconformance: Darwin bash oracle lacks GNU coreutils timeout for this character-device regression(darwin only) | xfail |
| Test | Status |
|---|---|
chdir is a synonym for cd - busybox ashconformance: restored upstream bash coverage exposes gbash behavior that still differs from bash(darwin, linux only) | xfail |
Survey of getcwd() syscallplatform-specific: test requires strace (Linux-only) and syscall behavior varies by platform | skip |
| Test | Status |
|---|---|
compgen -A userplatform-specific: gbash uses sandbox-visible passwd data instead of the host account database | skip |
compgen -f -X filter -- $curconformance: gbash behavior differs from bash(darwin only) | xfail |
compgen -W words -X filterconformance: gbash behavior differs from bash(darwin only) | xfail |
compgen doesn't respect -X for user-defined functionsconformance: gbash behavior differs from bash(darwin only) | xfail |
| Test | Status |
|---|---|
OPTIND narrowed downconformance: current spec expectation conflicts with the neighboring getopts state-tracking cases(darwin, linux only) | xfail |
| Test | Status |
|---|---|
command -v doesn't find executable dirconformance: gbash behavior differs from bash(darwin only) | xfail |
| Test | Status |
|---|---|
time pipelineconformance: gbash behavior differs from bash(darwin only) | xfail |
| Test | Status |
|---|---|
arg that would overflow 64 bits is detectedgbash does not implement process tables | skip |
Changing resource limit is deniedgbash does not implement process tables | skip |
exec -- 2>&1gbash 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 docconformance: 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 arggbash does not implement process tables | skip |
Exit builtin with too many argsgbash does not implement process tables | skip |
time with brace group argumentgbash does not implement process tables | skip |
ulimit -f 1 prevents files larger 512 bytesgbash does not implement process tables | skip |
ulimit -n limits file descriptorsgbash does not implement process tables | skip |
ulimit -S for soft limit (default), -H for hard limitgbash 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 shellsgbash does not implement process tables | skip |
ulimit negative arggbash does not implement process tables | skip |
ulimit negative flaggbash 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 bitsgbash does not implement process tables | skip |
ulimit too many argsgbash does not implement process tables | skip |
ulimit with no flags is like -fgbash does not implement process tables | skip |
write big file with ulimitgbash does not implement process tables | skip |
| Test | Status |
|---|---|
read bash bugintentional: gbash keeps the space-preserving result instead of reproducing bash's historical control-character bug | skip |
| Test | Status |
|---|---|
set -u with undefined var in interactive shell does NOT exit the interpreterconformance: gbash behavior differs from bash(darwin only) | xfail |
set -u with undefined variable exits the interpreterconformance: gbash behavior differs from bash(darwin only) | xfail |
| Test | Status |
|---|---|
times shows two formatted linesconformance: gbash behavior differs from bash(darwin only) | xfail |
| Test | Status |
|---|---|
trap DEBUG and pipeline (lastpipe difference)conformance: gbash behavior differs from bash(darwin only) | xfail |
| Test | Status |
|---|---|
trap ERR with redirectconformance: current spec expectation differs from bash-compatible redirect ERR line accounting(darwin, linux only) | xfail |
trap ERR with YSH procconformance: restored upstream bash coverage exposes gbash behavior that still differs from bash(darwin, linux only) | xfail |
| Test | Status |
|---|---|
Remove trap with an unsigned integerconformance: restored upstream bash coverage exposes gbash behavior that still differs from bash(darwin, linux only) | xfail |
trap USR1, sleep, SIGINT: non-interactivelyconformance: gbash behavior differs from bash(darwin only) | xfail |
trap with command.NoOp - check internal invariantconformance: gbash behavior differs from bash(darwin only) | xfail |
traps are not active inside subshells $() () trap | catconformance: gbash behavior differs from bash(darwin only) | xfail |
| Test | Status |
|---|---|
type -a -> builtinconformance: gbash behavior differs from bash(darwin only) | xfail |
type -ap -> builtinconformance: gbash behavior differs from bash(darwin only) | xfail |
type -P builtin -> not a fileconformance: gbash behavior differs from bash(darwin only) | xfail |
type -P builtin -> not a file but file foundconformance: gbash behavior differs from bash(darwin only) | xfail |
type -P does not find directories (regression)conformance: gbash behavior differs from bash(darwin only) | xfail |
| Test | Status |
|---|---|
Command blockconformance: gbash behavior differs from bash(darwin only) | xfail |
| Test | Status |
|---|---|
builtin cat crashes a subshell (#2530)conformance: Darwin bash oracle lacks /usr/bin/cat inside this harness(darwin only) | xfail |
| Test | Status |
|---|---|
More && ||conformance: gbash behavior differs from bash(darwin only) | xfail |
| Test | Status |
|---|---|
no matchconformance: restored upstream bash coverage exposes gbash behavior that still differs from bash(darwin, linux only) | xfail |
| Test | Status |
|---|---|
Unrecoverable: divide by zero in caseconformance: gbash behavior differs from bash(darwin only) | xfail |
Unrecoverable: divide by zero in conditional wordconformance: gbash behavior differs from bash(darwin only) | xfail |
Unrecoverable: divide by zero in redirect wordconformance: gbash behavior differs from bash(darwin only) | xfail |
| Test | Status |
|---|---|
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 |
| Test | Status |
|---|---|
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 respectedconformance: restored upstream bash coverage exposes gbash behavior that still differs from bash(darwin, linux only) | xfail |
| Test | Status |
|---|---|
in zsh, ***/ follows symlinked directories, while **/ does notconformance: restored upstream bash coverage exposes gbash behavior that still differs from bash(darwin, linux only) | xfail |
| Test | Status |
|---|---|
interactive parse error (regression)conformance: gbash behavior differs from bash(darwin only) | xfail |
Long Token - 65535 bytesconformance: Darwin wc still differs from GNU bash harness behavior for this case(darwin only) | xfail |
Token that's too long for Oils - 65536 bytesconformance: Darwin wc still differs from GNU bash harness behavior for this case(darwin only) | xfail |
| Test | Status |
|---|---|
Evaluation of argv[0] in pipeline occurs in childconformance: gbash behavior differs from bash(darwin only) | xfail |
Nested pipelinesconformance: gbash behavior differs from bash(darwin only) | xfail |
Pipeline in evalconformance: gbash behavior differs from bash(darwin only) | xfail |
Redirect in Pipelineconformance: gbash behavior differs from bash(darwin only) | xfail |
shopt -s lastpipe and shopt -s no_last_fork interactionconformance: gbash behavior differs from bash(darwin only) | xfail |
| Test | Status |
|---|---|
Brace group redirectconformance: gbash behavior differs from bash(darwin only) | xfail |
redirect bash extensions: [[ (( for ((conformance: gbash behavior differs from bash(darwin only) | xfail |
| Test | Status |
|---|---|
ysh behavior when glob doesn't matchconformance: restored upstream bash coverage exposes gbash behavior that still differs from bash(darwin, linux only) | xfail |
| Test | Status |
|---|---|
Redirect echo to stderr, and then redirect all of stdout somewhere.conformance: gbash behavior differs from bash(darwin only) | xfail |
| Test | Status |
|---|---|
Operator chars ; & but not |conformance: gbash behavior differs from bash(darwin only) | xfail |
Unquoted { is a regex parse errorconformance: gbash behavior differs from bash(darwin only) | xfail |
| Test | Status |
|---|---|
OSH calling bash with SHELLOPTS does not change braceexpandconformance: gbash behavior differs from bash(darwin only) | xfail |
| Test | Status |
|---|---|
failed commandconformance: gbash behavior differs from bash(darwin only) | xfail |
Here doc with redirectconformance: gbash behavior differs from bash(darwin only) | xfail |
pipelineconformance: gbash behavior differs from bash(darwin only) | xfail |
pipeline with builtinconformance: gbash behavior differs from bash(darwin only) | xfail |
| Test | Status |
|---|---|
~ expansion in readonly assignmentconformance: gbash behavior differs from bash(darwin only) | xfail |
No tilde expansion in word that looks like assignment but isn'tconformance: restored upstream bash coverage exposes gbash behavior that still differs from bash(darwin, linux only) | xfail |
strict tildeconformance: restored upstream bash coverage exposes gbash behavior that still differs from bash(darwin, linux only) | xfail |
| Test | Status |
|---|---|
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 |
| Test | Status |
|---|---|
$SHELL is set to what is in /etc/passwdconformance: gbash behavior differs from bash(darwin only) | xfail |
| Test | Status |
|---|---|
$HOME is NOT setconformance: gbash behavior differs from bash(darwin only) | xfail |
Vars set interactively only: $HISTFILEconformance: gbash behavior differs from bash(darwin only) | xfail |