*** Running test-ast-formats
(C (w <Lit_Chars echo>) (w <Lit_Chars hi>))
(command.Simple
  blame_tok:(Token
    id:Lit_Chars
    length:4
    col:0
    line:(SourceLine line_num:1 content:"echo hi" src:(source.CFlag))
  )
  more_env:[]
  words:[
    (CompoundWord parts:[...0x7f4624102940])
    (CompoundWord
      parts:[(Token id:Lit_Chars length:2 col:5 line:...0x7f4624121418)]
    )
  ]
  is_last_cmd:F
)
OK  test-ast-formats
*** Running test-exit-builtin-interactive
osh-0.27$ one
OK  test-exit-builtin-interactive
*** Running test-help
Oils 0.27.0		https://oils.pub/

~~~ oils-usage ~~~

bin/oils-for-unix is an executable that contains OSH, YSH, and more.

Usage:
    oils-for-unix MAIN_NAME ARG*
    MAIN_NAME ARG*

It behaves like busybox.  The command name can be passed as the first argument:

    oils-for-unix ysh -c 'echo hi'

More commonly, it's invoked through a symlink like 'ysh', which causes it to
behave like that command:

    ysh -c 'echo hi'

~~~ shell-flags ~~~

osh and ysh accept standard POSIX shell flags, like:

    bin/osh -o errexit -c 'false'
    bin/ysh -n myfile.ysh
    bin/ysh +o errexit -c 'false; echo ok'

They also accept these flags:

    -n                Parse the program but don't execute it.  Print the AST.
    --ast-format FMT  The format for the AST (text|text-abbrev)
    --eval FILE       Evaluate the given file, similar to the 'source' builtin.
                      Specify it multiple times to run multiple files.  If the
                      errexit option is on (e.g. in YSH), then the shell stops
                      when $? is non-zero after evaluating a file.
    --tool            Run a tool instead of the shell (cat-em|syntax-tree)

Examples:

    ysh --eval one.ysh --eval two.ysh -c 'echo hi'  # Run 2 files first
    osh -n -c 'hello'                               # pretty-print the AST
    ysh --ast-format text -n -c 'hello'             # in unabridged format

Oils 0.27.0		https://oils.pub/

~~~ osh-usage ~~~

bin/osh is compatible with POSIX shell, bash, and other shells.

Usage:
   osh FLAG* SCRIPT ARG*
   osh FLAG* -c COMMAND ARG*
   osh FLAG*

Examples:
    osh -c 'echo hi'
    osh myscript.sh
    echo 'echo hi' | osh

~~~ shell-flags ~~~

osh and ysh accept standard POSIX shell flags, like:

    bin/osh -o errexit -c 'false'
    bin/ysh -n myfile.ysh
    bin/ysh +o errexit -c 'false; echo ok'

They also accept these flags:

    -n                Parse the program but don't execute it.  Print the AST.
    --ast-format FMT  The format for the AST (text|text-abbrev)
    --eval FILE       Evaluate the given file, similar to the 'source' builtin.
                      Specify it multiple times to run multiple files.  If the
                      errexit option is on (e.g. in YSH), then the shell stops
                      when $? is non-zero after evaluating a file.
    --tool            Run a tool instead of the shell (cat-em|syntax-tree)

Examples:

    ysh --eval one.ysh --eval two.ysh -c 'echo hi'  # Run 2 files first
    osh -n -c 'hello'                               # pretty-print the AST
    ysh --ast-format text -n -c 'hello'             # in unabridged format

Oils 0.27.0		https://oils.pub/

~~~ ysh-usage ~~~

bin/ysh is the shell with data tYpes, influenced by pYthon, JavaScript, ...

Usage:
    ysh FLAG* SCRIPT ARG*
    ysh FLAG* -c COMMAND ARG*
    ysh FLAG*

Examples:
    ysh -c 'echo hi'
    ysh myscript.ysh
    echo 'echo hi' | ysh

Note that bin/ysh is the same as bin/osh with the ysh:all option group set:
    osh -o ysh:all -c 'echo hi'  # Same as YSH

~~~ shell-flags ~~~

osh and ysh accept standard POSIX shell flags, like:

    bin/osh -o errexit -c 'false'
    bin/ysh -n myfile.ysh
    bin/ysh +o errexit -c 'false; echo ok'

They also accept these flags:

    -n                Parse the program but don't execute it.  Print the AST.
    --ast-format FMT  The format for the AST (text|text-abbrev)
    --eval FILE       Evaluate the given file, similar to the 'source' builtin.
                      Specify it multiple times to run multiple files.  If the
                      errexit option is on (e.g. in YSH), then the shell stops
                      when $? is non-zero after evaluating a file.
    --tool            Run a tool instead of the shell (cat-em|syntax-tree)

Examples:

    ysh --eval one.ysh --eval two.ysh -c 'echo hi'  # Run 2 files first
    osh -n -c 'hello'                               # pretty-print the AST
    ysh --ast-format text -n -c 'hello'             # in unabridged format

Oils 0.27.0		https://oils.pub/

~~~ osh-usage ~~~

bin/osh is compatible with POSIX shell, bash, and other shells.

Usage:
   osh FLAG* SCRIPT ARG*
   osh FLAG* -c COMMAND ARG*
   osh FLAG*

Examples:
    osh -c 'echo hi'
    osh myscript.sh
    echo 'echo hi' | osh

~~~ shell-flags ~~~

osh and ysh accept standard POSIX shell flags, like:

    bin/osh -o errexit -c 'false'
    bin/ysh -n myfile.ysh
    bin/ysh +o errexit -c 'false; echo ok'

They also accept these flags:

    -n                Parse the program but don't execute it.  Print the AST.
    --ast-format FMT  The format for the AST (text|text-abbrev)
    --eval FILE       Evaluate the given file, similar to the 'source' builtin.
                      Specify it multiple times to run multiple files.  If the
                      errexit option is on (e.g. in YSH), then the shell stops
                      when $? is non-zero after evaluating a file.
    --tool            Run a tool instead of the shell (cat-em|syntax-tree)

Examples:

    ysh --eval one.ysh --eval two.ysh -c 'echo hi'  # Run 2 files first
    osh -n -c 'hello'                               # pretty-print the AST
    ysh --ast-format text -n -c 'hello'             # in unabridged format

Oils 0.27.0		https://oils.pub/

~~~ oils-usage ~~~

bin/oils-for-unix is an executable that contains OSH, YSH, and more.

Usage:
    oils-for-unix MAIN_NAME ARG*
    MAIN_NAME ARG*

It behaves like busybox.  The command name can be passed as the first argument:

    oils-for-unix ysh -c 'echo hi'

More commonly, it's invoked through a symlink like 'ysh', which causes it to
behave like that command:

    ysh -c 'echo hi'

~~~ shell-flags ~~~

osh and ysh accept standard POSIX shell flags, like:

    bin/osh -o errexit -c 'false'
    bin/ysh -n myfile.ysh
    bin/ysh +o errexit -c 'false; echo ok'

They also accept these flags:

    -n                Parse the program but don't execute it.  Print the AST.
    --ast-format FMT  The format for the AST (text|text-abbrev)
    --eval FILE       Evaluate the given file, similar to the 'source' builtin.
                      Specify it multiple times to run multiple files.  If the
                      errexit option is on (e.g. in YSH), then the shell stops
                      when $? is non-zero after evaluating a file.
    --tool            Run a tool instead of the shell (cat-em|syntax-tree)

Examples:

    ysh --eval one.ysh --eval two.ysh -c 'echo hi'  # Run 2 files first
    osh -n -c 'hello'                               # pretty-print the AST
    ysh --ast-format text -n -c 'hello'             # in unabridged format

OK  test-help
*** Running test-noexec-fails-properly
  echo; echo; |
              ^
[ -c flag ]:1: Invalid word while parsing command
_tmp/osh-usage-noexec.txt appears empty, as expected
OK  test-noexec-fails-properly
*** Running test-osh-file
===== Hello
hi
inside func
in subshell
another
ComSub
===== EMPTY
===== NO TRAILING NEWLINE
hi
OK  test-osh-file
*** Running test-osh-interactive
osh-0.27$ hi
osh-0.27$ ^D
osh-0.27$ osh-0.27$   ;
  ^
[ stdin -i ]:1: Invalid word while parsing command
osh-0.27$ ^D
osh-0.27$   ;echo OIL OIL
  ^
[ stdin -i ]:1: Invalid word while parsing command
osh-0.27$ ^D
osh-0.27$ osh-0.27$ ^D
OK  test-osh-interactive
*** Running test-osh-stdin
hi
inside func
in subshell
another
ComSub
===== EMPTY
===== NO TRAILING NEWLINE
hi

hi

line continuation
two
here doc
command sub
OK  test-osh-stdin
*** Running test-rc-file
TESTRC$ ^D
osh-0.27$ ^D
osh-0.27$ ^D
OK  test-rc-file
*** Running test-version
Oils 0.27.0		https://oils.pub/

Release Date: -
Arch: x86_64
OS: Linux
Platform: #25~22.04.1-Ubuntu SMP Thu Jan 16 21:37:09 UTC 2025
Compiler: GCC 8.3.0
Interpreter: CPython
Interpreter version: 2.7.16
Bytecode: -
OK  test-version

test/osh-usage.sh: 9 tests passed.