Builtin Commands
fortsh includes 58 builtin commands. Builtins are executed directly by the shell without spawning external processes.
Quick Reference
Navigation & Directories
| Command | Description | Source |
|---|
| cd | Change directory | builtins.f90:builtin_cd |
| pwd | Print working directory | builtins.f90:builtin_pwd |
| pushd | Push directory onto stack | directory_builtin.f90 |
| popd | Pop directory from stack | directory_builtin.f90 |
| dirs | Show directory stack | directory_builtin.f90 |
| prevd | Previous directory (fish-style) | builtins.f90 |
| nextd | Next directory (fish-style) | builtins.f90 |
| dirh | Directory history | builtins.f90 |
Variables & Environment
| Command | Description | Source |
|---|
| export | Export variables | builtins.f90:builtin_export |
| unset | Unset variables | builtins.f90:builtin_unset |
| readonly | Mark variables readonly | builtins.f90:builtin_readonly |
| declare | Declare variables | builtins.f90:builtin_declare |
| local | Function-local variables | builtins.f90:builtin_local |
| printenv | Print environment | builtins.f90:builtin_printenv |
| shift | Shift positional params | builtins.f90:builtin_shift |
I/O & Output
| Command | Description | Source |
|---|
| echo | Print text | builtins.f90:builtin_echo |
| printf | Formatted output | printf_builtin.f90 |
| read | Read input | read_builtin.f90 |
Job Control
| Command | Description | Source |
|---|
| jobs | List jobs | builtins.f90:builtin_jobs |
| fg / bg | Foreground/background job | builtins.f90:builtin_fg |
| kill | Send signal | builtins.f90:builtin_kill |
| wait | Wait for jobs | builtins.f90:builtin_wait |
| coproc | Coprocess | builtins.f90:builtin_coproc |
Scripting & Control
| Command | Description | Source |
|---|
| exit | Exit shell | builtins.f90:builtin_exit |
| source / . | Execute file | builtins.f90:builtin_source |
| eval | Evaluate string | eval_builtin.f90 |
| exec | Replace shell | builtins.f90:builtin_exec |
| return | Return from function | builtins.f90:builtin_return |
| break | Break from loop | builtins.f90:builtin_break |
| continue | Continue loop | builtins.f90:builtin_continue |
Command Identification
| Command | Description | Source |
|---|
| type | Show command type | command_builtin.f90 |
| which | Find command | command_builtin.f90 |
| command | Execute bypassing functions | command_builtin.f90 |
| hash | Command cache | builtins.f90:builtin_hash |
Testing & Conditionals
| Command | Description | Source |
|---|
| test / [ | Test expression | test_builtin.f90 |
| [[ | Advanced test | advanced_test.f90 |
| getopts | Parse options | getopts_builtin.f90 |
Aliases & Abbreviations
| Command | Description | Source |
|---|
| alias / unalias | Define/remove alias | builtins.f90:builtin_alias |
| abbr | Abbreviations (fish-style) | builtins.f90:builtin_abbr |
History & Completion
| Command | Description | Source |
|---|
| history | Command history | builtins.f90:builtin_history |
| fc | Edit history | builtins.f90:builtin_fc |
| complete | Define completions | builtins.f90:builtin_complete |
| compgen | Generate completions | builtins.f90:builtin_compgen |
Shell Options
| Command | Description | Source |
|---|
| set | Set options | shell_options.f90 |
| shopt | Shell options | shell_options.f90 |
| config | Configuration | builtins.f90:builtin_config |
Signals
| Command | Description | Source |
|---|
| trap | Set signal handlers | builtins.f90:builtin_trap |
System & Debugging
| Command | Description | Source |
|---|
| umask | File creation mask | builtins.f90:builtin_umask |
| ulimit | Resource limits | builtins.f90:builtin_ulimit |
| times | Process times | builtins.f90:builtin_times |
| let | Arithmetic evaluation | builtins.f90:builtin_let |
| perf | Performance metrics | builtins.f90:builtin_perf |
| memory | Memory statistics | builtins.f90:builtin_memory |
Special
| Command | Description |
|---|
| : | Null command (no-op) |
| help | Display help |
Implementation Notes
All builtins are implemented in Fortran and execute within the shell process. Source files are located in:
src/execution/builtins.f90 - Core builtins
src/scripting/*.f90 - Specialized builtins (printf, read, test, etc.)
Return values follow POSIX conventions:
0 - Success
1 - General failure
2 - Usage/syntax error
127 - Command not found (for exec, source)