Add in a shell tagline (per lash/hush behavior) to make it easier

to know which shell is in use.  Add in 'help' to list available
builtins, and fixup msh so it can do STANDALONE_SHELL.
 -Erik
This commit is contained in:
Eric Andersen
2001-07-07 00:05:55 +00:00
parent b7e6f13b3c
commit 1c03923b0b
5 changed files with 325 additions and 62 deletions

View File

@ -1603,6 +1603,7 @@ static int exitcmd (int, char **);
static int exportcmd (int, char **);
static int histcmd (int, char **);
static int hashcmd (int, char **);
static int helpcmd (int, char **);
static int jobscmd (int, char **);
static int localcmd (int, char **);
#ifndef BB_PWD
@ -1704,6 +1705,7 @@ static const struct builtincmd builtincmds[] = {
{ BUILTIN_REGULAR "getopts", getoptscmd },
#endif
{ BUILTIN_NOSPEC "hash", hashcmd },
{ BUILTIN_NOSPEC "help", helpcmd },
{ BUILTIN_REGULAR "jobs", jobscmd },
#ifdef JOBS
{ BUILTIN_REGULAR "kill", killcmd },
@ -3274,6 +3276,7 @@ static void
setinteractive(int on)
{
static int is_interactive;
static int do_banner=0;
if (on == is_interactive)
return;
@ -3282,6 +3285,12 @@ setinteractive(int on)
setsignal(SIGTERM);
chkmail(1);
is_interactive = on;
if (do_banner==0 && is_interactive) {
/* Looks like they want an interactive shell */
printf( "\n\n" BB_BANNER " Built-in shell (ash)\n");
printf( "Enter 'help' for a list of built-in commands.\n\n");
do_banner=1;
}
}
static void
@ -3802,6 +3811,51 @@ printentry(cmdp, verbose)
/*** List the available builtins ***/
static int helpcmd(int argc, char** argv)
{
int col, i;
const struct builtincmd *x;
printf("\nBuilt-in commands:\n");
printf("-------------------\n");
for (col=0, i=0, x = builtincmds; i < NUMBUILTINS; x++, i++) {
if (!x->name || ! (x->name+1))
continue;
col += printf("%s%s", ((col == 0) ? "\t" : " "),
(x->name+1));
if (col > 60) {
printf("\n");
col = 0;
}
}
#ifdef BB_FEATURE_SH_STANDALONE_SHELL
{
const struct BB_applet *applet;
extern const struct BB_applet applets[];
extern const size_t NUM_APPLETS;
for (i=0, applet = applets; i < NUM_APPLETS; applet++, i++) {
if (!applet->name)
continue;
col += printf("%s%s", ((col == 0) ? "\t" : " "),
applet->name);
if (col > 60) {
printf("\n");
col = 0;
}
}
}
#endif
printf("\n\n");
return EXIT_SUCCESS;
}
/*
* Resolve a command name. If you change this routine, you may have to
* change the shellexec routine as well.
@ -7755,6 +7809,11 @@ shell_main(argc, argv)
EXECCMD = find_builtin("exec");
EVALCMD = find_builtin("eval");
#ifndef BB_FEATURE_SH_FANCY_PROMPT
unsetenv("PS1");
unsetenv("PS2");
#endif
#if PROFILE
monitor(4, etext, profile_buf, sizeof profile_buf, 50);
#endif
@ -13088,7 +13147,7 @@ findvar(struct var **vpp, const char *name)
/*
* Copyright (c) 1999 Herbert Xu <herbert@debian.org>
* This file contains code for the times builtin.
* $Id: ash.c,v 1.6 2001/07/06 04:26:23 andersen Exp $
* $Id: ash.c,v 1.7 2001/07/07 00:05:55 andersen Exp $
*/
static int timescmd (int argc, char **argv)
{