1/* 2 * printenv -- minimal builtin clone of BSD printenv(1). 3 * 4 * usage: printenv [varname] 5 * 6 */ 7 8#include <config.h> 9#include <stdio.h> 10 11#include "builtins.h" 12#include "shell.h" 13#include "bashgetopt.h" 14 15extern char **export_env; 16 17int 18printenv_builtin (list) 19 WORD_LIST *list; 20{ 21 register char **envp; 22 int opt; 23 SHELL_VAR *var; 24 25 reset_internal_getopt (); 26 while ((opt = internal_getopt (list, "")) != -1) 27 { 28 switch (opt) 29 { 30 default: 31 builtin_usage (); 32 return (EX_USAGE); 33 } 34 } 35 list = loptend; 36 37 /* printenv */ 38 if (list == 0) 39 { 40 maybe_make_export_env (); /* this allows minimal code */ 41 for (envp = export_env; *envp; envp++) 42 printf ("%s\n", *envp); 43 return (EXECUTION_SUCCESS); 44 } 45 46 /* printenv varname */ 47 var = find_variable (list->word->word); 48 if (var == 0 || (exported_p (var) == 0)) 49 return (EXECUTION_FAILURE); 50 51 if (function_p (var)) 52 print_var_function (var); 53 else 54 print_var_value (var, 0); 55 56 return (EXECUTION_SUCCESS); 57} 58 59char *printenv_doc[] = { 60 "print values of environment variables", 61 (char *)NULL 62}; 63 64struct builtin printenv_struct = { 65 "printenv", 66 printenv_builtin, 67 BUILTIN_ENABLED, 68 printenv_doc, 69 "printenv [varname]", 70 0 71}; 72