shell/task: fix subshell exit status
shell/task: fix last_status
shell/task: add pipelines
shell: document subshell_fork
shell/task: add function definition
shell/task: add case clause
shell/task: add for clause
shell/task: add loop clause
shell/task: add if clause
shell: fix subshell_fork error return value
shell/task: add proper builtin support
shell/task: implement work tasks
shell/job: add job_wait_process
shell/task: re-implement very basic shell
This will get replaced with much simpler code.
test: rename word.sh to syntax.sh
test: don't clutter logs with env
Mostly implement break and continue builtins
The main thing that's missing here is moving the number of loops into
the call stack:
To prevent you from breaking out of your caller's loop in a function.
parser: fail on invalid parameter
POSIX says '$' followed by an invalid character is unspecified behaviour. Make
the parser fail instead of handling it as a string.
This diverges from the dash implementation.
Fixes: aff5a58f0f99 ("parser: handle `$` followed by invalid char more gracefully")
parser: handle `$` followed by invalid char more gracefully
e.g. `$ ` and `$\n`
POSIX says it's undefined behaviour.