mirror of https://github.com/ipxe/ipxe.git
[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>pull/1/head
parent
719f2d793c
commit
1fcea25c42
|
@ -74,14 +74,57 @@ struct command help_command __command = {
|
||||||
* Start command shell
|
* Start command shell
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
void shell ( void ) {
|
int shell ( void ) {
|
||||||
char *line;
|
char *line;
|
||||||
|
int rc = 0;
|
||||||
|
|
||||||
do {
|
do {
|
||||||
line = readline ( shell_prompt );
|
line = readline ( shell_prompt );
|
||||||
if ( line ) {
|
if ( line ) {
|
||||||
system ( line );
|
rc = system ( line );
|
||||||
free ( line );
|
free ( line );
|
||||||
}
|
}
|
||||||
} while ( shell_exit == 0 );
|
} 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,
|
||||||
|
};
|
||||||
|
|
|
@ -9,6 +9,6 @@
|
||||||
|
|
||||||
FILE_LICENCE ( GPL2_OR_LATER );
|
FILE_LICENCE ( GPL2_OR_LATER );
|
||||||
|
|
||||||
extern void shell ( void );
|
extern int shell ( void );
|
||||||
|
|
||||||
#endif /* _IPXE_SHELL_H */
|
#endif /* _IPXE_SHELL_H */
|
||||||
|
|
Loading…
Reference in New Issue