diff options
author | Michael Brown <mcb30@ipxe.org> | 2010-11-29 14:19:59 +0000 |
---|---|---|
committer | Michael Brown <mcb30@ipxe.org> | 2010-11-29 14:19:59 +0000 |
commit | 7bebe9579ee5ea1cfcfcdf25032dbab80ccc489f (patch) | |
tree | 1d9a7812b7b79c1ba5f71af8ce01823cb89763a0 /src/include/ipxe/shell.h | |
parent | 01df5c510f4949f1d9d85c0067c24b1093e3f838 (diff) | |
download | ipxe-7bebe9579ee5ea1cfcfcdf25032dbab80ccc489f.tar.gz |
[cmdline] Match user expectations for &&, ||, goto, and exit
The && and || operators should be left-associative, since that is how
they are treated in most other languages (including C and Unix
shell). For example, in the command:
dhcp net0 && goto dhcp_ok || echo No DHCP on net0
if the "dhcp net0" fails then the "echo" should be executed.
After an "exit" or a successful "goto", further commands on the same
line should never be executed. For example:
goto somewhere && echo This should never be printed
exit 0 && echo This should never be printed
exit 1 && echo This should never be printed
An "exit" should cause the current shell or script to terminate and
return the specified exit status to its caller. For example:
chain test.ipxe && echo Success || echo Failure
[in test.ipxe]
#!ipxe
exit 0
should echo "Success".
Signed-off-by: Michael Brown <mcb30@ipxe.org>
Diffstat (limited to 'src/include/ipxe/shell.h')
-rw-r--r-- | src/include/ipxe/shell.h | 22 |
1 files changed, 22 insertions, 0 deletions
diff --git a/src/include/ipxe/shell.h b/src/include/ipxe/shell.h index 55e56346c..faa32f422 100644 --- a/src/include/ipxe/shell.h +++ b/src/include/ipxe/shell.h @@ -9,6 +9,28 @@ FILE_LICENCE ( GPL2_OR_LATER ); +/** Shell stop states */ +enum shell_stop_state { + /** Continue processing */ + SHELL_CONTINUE = 0, + /** + * Stop processing current command line + * + * This is the stop state entered by commands that change the flow + * of execution, such as "goto". + */ + SHELL_STOP_COMMAND = 1, + /** + * Stop processing commands + * + * This is the stop state entered by commands that terminate + * the flow of execution, such as "exit". + */ + SHELL_STOP_COMMAND_SEQUENCE = 2, +}; + +extern void shell_stop ( int stop ); +extern int shell_stopped ( int stop ); extern int shell ( void ); #endif /* _IPXE_SHELL_H */ |