apps/nshlib: If CONFIG_NSH_VARS=y, the NSH 'set' command with not argument will list all of the local NSH variables.
This commit is contained in:
parent
cb982ea8df
commit
cf6c6a9556
@ -1136,6 +1136,12 @@ o set [{+|-}{e|x|xe|ex}] [<name> <value>]
|
|||||||
The local Bash variable would that then shadow the environment variable
|
The local Bash variable would that then shadow the environment variable
|
||||||
with a differing value.
|
with a differing value.
|
||||||
|
|
||||||
|
If CONFIG_NSH_VARS is selected and no arguments are provided, then the
|
||||||
|
'set' command will list all list all NSH variables.
|
||||||
|
|
||||||
|
nsh> set
|
||||||
|
foolbar=foovalue
|
||||||
|
|
||||||
Set the 'exit on error control' and/or 'print a trace' of commands when parsing
|
Set the 'exit on error control' and/or 'print a trace' of commands when parsing
|
||||||
scripts in NSH. The settinngs are in effect from the point of exection, until
|
scripts in NSH. The settinngs are in effect from the point of exection, until
|
||||||
they are changed again, or in the case of the init script, the settings are
|
they are changed again, or in the case of the init script, the settings are
|
||||||
|
34
nshlib/nsh.h
34
nshlib/nsh.h
@ -863,6 +863,13 @@ typedef CODE int (*nsh_direntry_handler_t)(FAR struct nsh_vtbl_s *vtbl,
|
|||||||
FAR struct dirent *entryp,
|
FAR struct dirent *entryp,
|
||||||
FAR void *pvarg);
|
FAR void *pvarg);
|
||||||
|
|
||||||
|
#if defined(CONFIG_NSH_VARS) && !defined(CONFIG_NSH_DISABLE_SET)
|
||||||
|
/* Used with nsh_foreach_var() */
|
||||||
|
|
||||||
|
typedef int (*nsh_foreach_var_t)(FAR struct nsh_vtbl_s *vtbl, FAR void *arg,
|
||||||
|
FAR const char *pair);
|
||||||
|
#endif
|
||||||
|
|
||||||
/****************************************************************************
|
/****************************************************************************
|
||||||
* Public Data
|
* Public Data
|
||||||
****************************************************************************/
|
****************************************************************************/
|
||||||
@ -1464,7 +1471,7 @@ FAR char *nsh_trimspaces(FAR char *str);
|
|||||||
* Description:
|
* Description:
|
||||||
* Get, set, or unset an NSH variable.
|
* Get, set, or unset an NSH variable.
|
||||||
*
|
*
|
||||||
* Input Parmeters:
|
* Input Parameters:
|
||||||
* vtbl - NSH session data
|
* vtbl - NSH session data
|
||||||
* name - The name of the variable to get or set
|
* name - The name of the variable to get or set
|
||||||
* value - The value to use with nsh_setvar()
|
* value - The value to use with nsh_setvar()
|
||||||
@ -1472,7 +1479,7 @@ FAR char *nsh_trimspaces(FAR char *str);
|
|||||||
* Returned value:
|
* Returned value:
|
||||||
* nsh_getvar() returns a read-only reference to the variable value on
|
* nsh_getvar() returns a read-only reference to the variable value on
|
||||||
* success or NULL on failure.
|
* success or NULL on failure.
|
||||||
* nset_unsetvar() returns OK on success or an netaged errno value on
|
* nset_unsetvar() returns OK on success or an negated errno value on
|
||||||
* failure.
|
* failure.
|
||||||
*
|
*
|
||||||
****************************************************************************/
|
****************************************************************************/
|
||||||
@ -1488,4 +1495,27 @@ int nsh_unsetvar(FAR struct nsh_vtbl_s *vtbl, FAR const char *name);
|
|||||||
#endif
|
#endif
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
/****************************************************************************
|
||||||
|
* Name: nsh_foreach_var
|
||||||
|
*
|
||||||
|
* Description:
|
||||||
|
* Visit each name-value pair in the environment.
|
||||||
|
*
|
||||||
|
* Input Parameters:
|
||||||
|
* vtbl - NSH session data
|
||||||
|
* cb - The callback function to be invoked for each environment
|
||||||
|
* variable.
|
||||||
|
*
|
||||||
|
* Returned Value:
|
||||||
|
* Zero if the all NSH variables have been traversed. A non-zero value
|
||||||
|
* means that the callback function requested early termination by
|
||||||
|
* returning a nonzero value.
|
||||||
|
*
|
||||||
|
****************************************************************************/
|
||||||
|
|
||||||
|
#if defined(CONFIG_NSH_VARS) && !defined(CONFIG_NSH_DISABLE_SET)
|
||||||
|
int nsh_foreach_var(FAR struct nsh_vtbl_s *vtbl, nsh_foreach_var_t cb,
|
||||||
|
FAR void *arg);
|
||||||
|
#endif
|
||||||
|
|
||||||
#endif /* __APPS_NSHLIB_NSH_H */
|
#endif /* __APPS_NSHLIB_NSH_H */
|
||||||
|
@ -450,6 +450,15 @@ static const struct cmdmap_s g_cmdmap[] =
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifndef CONFIG_NSH_DISABLE_SET
|
#ifndef CONFIG_NSH_DISABLE_SET
|
||||||
|
#ifdef CONFIG_NSH_VARS
|
||||||
|
# if !defined(CONFIG_DISABLE_ENVIRON) && !defined(CONFIG_NSH_DISABLESCRIPT)
|
||||||
|
{ "set", cmd_set, 1, 4, "[{+|-}{e|x|xe|ex}] [<name> <value>]" },
|
||||||
|
# elif !defined(CONFIG_DISABLE_ENVIRON) && defined(CONFIG_NSH_DISABLESCRIPT)
|
||||||
|
{ "set", cmd_set, 1, 3, "[<name> <value>]" },
|
||||||
|
# elif defined(CONFIG_DISABLE_ENVIRON) && !defined(CONFIG_NSH_DISABLESCRIPT)
|
||||||
|
{ "set", cmd_set, 1, 2, "[{+|-}{e|x|xe|ex}]" },
|
||||||
|
# endif
|
||||||
|
#else
|
||||||
# if !defined(CONFIG_DISABLE_ENVIRON) && !defined(CONFIG_NSH_DISABLESCRIPT)
|
# if !defined(CONFIG_DISABLE_ENVIRON) && !defined(CONFIG_NSH_DISABLESCRIPT)
|
||||||
{ "set", cmd_set, 2, 4, "[{+|-}{e|x|xe|ex}] [<name> <value>]" },
|
{ "set", cmd_set, 2, 4, "[{+|-}{e|x|xe|ex}] [<name> <value>]" },
|
||||||
# elif !defined(CONFIG_DISABLE_ENVIRON) && defined(CONFIG_NSH_DISABLESCRIPT)
|
# elif !defined(CONFIG_DISABLE_ENVIRON) && defined(CONFIG_NSH_DISABLESCRIPT)
|
||||||
@ -458,6 +467,7 @@ static const struct cmdmap_s g_cmdmap[] =
|
|||||||
{ "set", cmd_set, 2, 2, "{+|-}{e|x|xe|ex}" },
|
{ "set", cmd_set, 2, 2, "{+|-}{e|x|xe|ex}" },
|
||||||
# endif
|
# endif
|
||||||
#endif
|
#endif
|
||||||
|
#endif /* CONFIG_NSH_DISABLE_SET */
|
||||||
|
|
||||||
#if CONFIG_NFILE_DESCRIPTORS > 0 && CONFIG_NFILE_STREAMS > 0 && !defined(CONFIG_NSH_DISABLESCRIPT)
|
#if CONFIG_NFILE_DESCRIPTORS > 0 && CONFIG_NFILE_STREAMS > 0 && !defined(CONFIG_NSH_DISABLESCRIPT)
|
||||||
# ifndef CONFIG_NSH_DISABLE_SH
|
# ifndef CONFIG_NSH_DISABLE_SH
|
||||||
|
@ -124,6 +124,19 @@ static inline char *nsh_getdirpath(FAR struct nsh_vtbl_s *vtbl,
|
|||||||
return alloc;
|
return alloc;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/****************************************************************************
|
||||||
|
* Name: nsh_dumpvar
|
||||||
|
****************************************************************************/
|
||||||
|
|
||||||
|
#if defined(CONFIG_NSH_VARS) && !defined(CONFIG_NSH_DISABLE_SET)
|
||||||
|
static int nsh_dumpvar(FAR struct nsh_vtbl_s *vtbl, FAR void *arg,
|
||||||
|
FAR const char *pair)
|
||||||
|
{
|
||||||
|
nsh_output(vtbl, "%s\n", pair);
|
||||||
|
return OK;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
/****************************************************************************
|
/****************************************************************************
|
||||||
* Public Functions
|
* Public Functions
|
||||||
****************************************************************************/
|
****************************************************************************/
|
||||||
@ -336,8 +349,17 @@ int cmd_set(FAR struct nsh_vtbl_s *vtbl, int argc, char **argv)
|
|||||||
const char opts[] = NSH_NP_SET_OPTIONS;
|
const char opts[] = NSH_NP_SET_OPTIONS;
|
||||||
int op;
|
int op;
|
||||||
|
|
||||||
/* REVISIT: set with no arguments should show all of the NSH variables */
|
#ifdef CONFIG_NSH_VARS
|
||||||
|
/* Set with no arguments will show all of the NSH variables */
|
||||||
|
|
||||||
|
if (argc == 1)
|
||||||
|
{
|
||||||
|
ret = nsh_foreach_var(vtbl, nsh_dumpvar, NULL);
|
||||||
|
nsh_output(vtbl, "\n");
|
||||||
|
return ret < 0 ? ERROR : OK;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
#endif
|
||||||
#ifdef NSH_HAVE_VARS
|
#ifdef NSH_HAVE_VARS
|
||||||
/* Support set [{+|-}{e|x|xe|ex}] [<name> <value>] */
|
/* Support set [{+|-}{e|x|xe|ex}] [<name> <value>] */
|
||||||
|
|
||||||
|
@ -187,7 +187,7 @@ int nsh_removevar(FAR struct console_stdio_s *pstate, FAR char *pair)
|
|||||||
* Description:
|
* Description:
|
||||||
* Get, set, or unset an NSH variable.
|
* Get, set, or unset an NSH variable.
|
||||||
*
|
*
|
||||||
* Input Parmeters:
|
* Input Parameters:
|
||||||
* vtbl - NSH session data
|
* vtbl - NSH session data
|
||||||
* name - The name of the variable to get or set
|
* name - The name of the variable to get or set
|
||||||
* value - The value to use with nsh_setvar()
|
* value - The value to use with nsh_setvar()
|
||||||
@ -195,7 +195,7 @@ int nsh_removevar(FAR struct console_stdio_s *pstate, FAR char *pair)
|
|||||||
* Returned value:
|
* Returned value:
|
||||||
* nsh_getvar() returns a read-only reference to the variable value on
|
* nsh_getvar() returns a read-only reference to the variable value on
|
||||||
* success or NULL on failure.
|
* success or NULL on failure.
|
||||||
* nset_unsetvar() returns OK on success or an netaged errno value on
|
* nset_unsetvar() returns OK on success or an negated errno value on
|
||||||
* failure.
|
* failure.
|
||||||
*
|
*
|
||||||
****************************************************************************/
|
****************************************************************************/
|
||||||
@ -204,8 +204,7 @@ int nsh_removevar(FAR struct console_stdio_s *pstate, FAR char *pair)
|
|||||||
* Name: nsh_getvar
|
* Name: nsh_getvar
|
||||||
****************************************************************************/
|
****************************************************************************/
|
||||||
|
|
||||||
FAR const char *nsh_getvar(FAR struct nsh_vtbl_s *vtbl,
|
FAR char *nsh_getvar(FAR struct nsh_vtbl_s *vtbl,FAR const char *name)
|
||||||
FAR const char *name)
|
|
||||||
{
|
{
|
||||||
FAR struct console_stdio_s *pstate = (FAR struct console_stdio_s *)vtbl;
|
FAR struct console_stdio_s *pstate = (FAR struct console_stdio_s *)vtbl;
|
||||||
FAR char *pair;
|
FAR char *pair;
|
||||||
@ -365,4 +364,58 @@ int nsh_unsetvar(FAR struct nsh_vtbl_s *vtbl, FAR const char *name)
|
|||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
/****************************************************************************
|
||||||
|
* Name: nsh_foreach_var
|
||||||
|
*
|
||||||
|
* Description:
|
||||||
|
* Visit each name-value pair in the environment.
|
||||||
|
*
|
||||||
|
* Input Parameters:
|
||||||
|
* vtbl - NSH session data
|
||||||
|
* cb - The callback function to be invoked for each environment
|
||||||
|
* variable.
|
||||||
|
*
|
||||||
|
* Returned Value:
|
||||||
|
* Zero if the all NSH variables have been traversed. A non-zero value
|
||||||
|
* means that the callback function requested early termination by
|
||||||
|
* returning a nonzero value.
|
||||||
|
*
|
||||||
|
****************************************************************************/
|
||||||
|
|
||||||
|
#ifndef CONFIG_NSH_DISABLE_SET
|
||||||
|
int nsh_foreach_var(FAR struct nsh_vtbl_s *vtbl, nsh_foreach_var_t cb,
|
||||||
|
FAR void *arg)
|
||||||
|
{
|
||||||
|
FAR struct console_stdio_s *pstate = (FAR struct console_stdio_s *)vtbl;
|
||||||
|
FAR char *ptr;
|
||||||
|
FAR char *end;
|
||||||
|
int ret = OK;
|
||||||
|
|
||||||
|
/* Verify input parameters */
|
||||||
|
|
||||||
|
DEBUGASSERT(pstate != NULL && cb != NULL);
|
||||||
|
|
||||||
|
/* Search for a name=value string with matching name */
|
||||||
|
|
||||||
|
end = &pstate->varp[pstate->varsz];
|
||||||
|
for (ptr = pstate->varp; ptr < end; ptr += (strlen(ptr) + 1))
|
||||||
|
{
|
||||||
|
/* Perform the callback */
|
||||||
|
|
||||||
|
ret = cb(vtbl, arg, ptr);
|
||||||
|
|
||||||
|
/* Terminate the traversal early if the callback so requests by
|
||||||
|
* returning a non-zero value.
|
||||||
|
*/
|
||||||
|
|
||||||
|
if (ret != 0)
|
||||||
|
{
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
#endif /* CONFIG_NSH_VARS */
|
#endif /* CONFIG_NSH_VARS */
|
||||||
|
Loading…
Reference in New Issue
Block a user