int cmd_sh(FAR struct nsh_vtbl_s *vtbl, int argc, char **argv) { return nsh_script(vtbl, argv[0], argv[1]); }
int nsh_consolemain(int argc, char *argv[]) { FAR struct console_stdio_s *pstate = nsh_newconsole(); int ret; DEBUGASSERT(pstate); /* If we are using a USB serial console, then we will have to wait for the * USB to be connected to the host. */ #ifdef HAVE_USB_CONSOLE ret = nsh_usbconsole(); DEBUGASSERT(ret == OK); #endif /* Present a greeting */ fputs(g_nshgreeting, pstate->cn_outstream); fflush(pstate->cn_outstream); /* Execute the startup script */ #ifdef CONFIG_NSH_ROMFSETC (void)nsh_script(&pstate->cn_vtbl, "init", NSH_INITPATH); #endif /* Then enter the command line parsing loop */ for (;;) { /* For the case of debugging the USB console... dump collected USB trace data */ nsh_usbtrace(); /* Display the prompt string */ fputs(g_nshprompt, pstate->cn_outstream); fflush(pstate->cn_outstream); /* Get the next line of input */ ret = readline(pstate->cn_line, CONFIG_NSH_LINELEN, INSTREAM(pstate), OUTSTREAM(pstate)); if (ret > 0) { /* Parse process the command */ (void)nsh_parse(&pstate->cn_vtbl, pstate->cn_line); fflush(pstate->cn_outstream); } /* Readline normally returns the number of characters read, * but will return 0 on end of file or a negative value * if an error occurs. Either will cause the session to * terminate. */ else { fprintf(pstate->cn_outstream, g_fmtcmdfailed, "nsh_consolemain", "readline", NSH_ERRNO_OF(-ret)); nsh_exit(&pstate->cn_vtbl, 1); } } /* Clean up. We do not get here, but this is necessary to keep some * compilers happy. But others will complain that this code is not * reachable. */ nsh_exit(&pstate->cn_vtbl, 0); return OK; }