Slush is not planned to be a useful interactive shell, but instead a lightweight POSIX-compliant shell inspired by Dash. Below is a list of objectives for the near term. The to-do list is always growing as I learn more about what goes into a POSIX shell.
- Subshell
- Backtick subshell
- Dollar sign subshell
- Pipelines
- better pipelines that don't require EOF
- Expansions
- Brace expansions
- Parameter Expansion
- Tilde Expansion
- Pathname Expansion
- Basic single quote strings
- Double quote strings with substitutions
- File redirects
- Redirect input with
<
- Explicit file descriptor redirects
- String Splitting
- Globbing
- Environment handling
- Calling variables
- Assigning Variables
- Special Parameters
- previous exit status
- Positional params
- PID of subshell
- PID of most recent background
- Name and shell startups
- Control Flow
- if
- elif
- else
- while
- until
- for
- Lists
- And-if (
||
) - Or-if (
&&
)
- And-if (
- Background process control
- Moving jobs to the background
- bringing jobs to the foreground
- listing available jobs
- essential built-ins
- list of posix built ins at the bottom
- cd
- exit
- true/false
- alias
- ctrl-c to kill jobs [BROKEN]
- fix bug where ctrl-c on a job that modifies TTY state utterly breaks the terminal (for example less)
- fix bug where ctrl-c kills bg jobs as well
- Use libc calls directly (no ctrl-c rs crate)
- jobs in array aren't removed when child ends
- Path cleaning w/ out clean-path library
- Built in functions