david/ipxe
Archived
1
0

[shell] Add "shell" command

The "shell" command allows a script to enter an interactive shell,
which is potentially useful for troubleshooting.

Signed-off-by: Michael Brown <mcb30@ipxe.org>
This commit is contained in:
Michael Brown 2010-11-28 21:09:33 +00:00
parent 719f2d793c
commit 1fcea25c42
2 changed files with 46 additions and 3 deletions

View File

@ -74,14 +74,57 @@ struct command help_command __command = {
* Start command shell
*
*/
void shell ( void ) {
int shell ( void ) {
char *line;
int rc = 0;
do {
line = readline ( shell_prompt );
if ( line ) {
system ( line );
rc = system ( line );
free ( line );
}
} while ( shell_exit == 0 );
shell_exit = 0;
return rc;
}
/** "shell" options */
struct shell_options {};
/** "shell" option list */
static struct option_descriptor shell_opts[] = {};
/** "shell" command descriptor */
static struct command_descriptor shell_cmd =
COMMAND_DESC ( struct shell_options, shell_opts, 0, 0,
"", "" );
/**
* "shell" command
*
* @v argc Argument count
* @v argv Argument list
* @ret rc Return status code
*/
static int shell_exec ( int argc, char **argv ) {
struct shell_options opts;
int rc;
/* Parse options */
if ( ( rc = parse_options ( argc, argv, &shell_cmd, &opts ) ) != 0 )
return rc;
/* Start shell */
if ( ( rc = shell() ) != 0 )
return rc;
return 0;
}
/** "shell" command */
struct command shell_command __command = {
.name = "shell",
.exec = shell_exec,
};

View File

@ -9,6 +9,6 @@
FILE_LICENCE ( GPL2_OR_LATER );
extern void shell ( void );
extern int shell ( void );
#endif /* _IPXE_SHELL_H */