*** 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:[...0x7f1cbf7928d8]) (CompoundWord parts:[(Token id:Lit_Chars length:2 col:5 line:...0x7f1cbf7ae470)] ) ] 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.