diff options
Diffstat (limited to 'shell')
-rw-r--r-- | shell/ash.c | 85 | ||||
-rw-r--r-- | shell/hush.c | 68 |
2 files changed, 51 insertions, 102 deletions
diff --git a/shell/ash.c b/shell/ash.c index 9c46a93e0..20ed9652c 100644 --- a/shell/ash.c +++ b/shell/ash.c | |||
@@ -35,8 +35,6 @@ | |||
35 | //config: bool "Optimize for size instead of speed" | 35 | //config: bool "Optimize for size instead of speed" |
36 | //config: default y | 36 | //config: default y |
37 | //config: depends on ASH || SH_IS_ASH || BASH_IS_ASH | 37 | //config: depends on ASH || SH_IS_ASH || BASH_IS_ASH |
38 | //config: help | ||
39 | //config: Compile ash for reduced size at the price of speed. | ||
40 | //config: | 38 | //config: |
41 | //config:config ASH_INTERNAL_GLOB | 39 | //config:config ASH_INTERNAL_GLOB |
42 | //config: bool "Use internal glob() implementation" | 40 | //config: bool "Use internal glob() implementation" |
@@ -46,6 +44,23 @@ | |||
46 | //config: Do not use glob() function from libc, use internal implementation. | 44 | //config: Do not use glob() function from libc, use internal implementation. |
47 | //config: Use this if you are getting "glob.h: No such file or directory" | 45 | //config: Use this if you are getting "glob.h: No such file or directory" |
48 | //config: or similar build errors. | 46 | //config: or similar build errors. |
47 | //config: Note that as of now (2017-01), uclibc and musl glob() both have bugs | ||
48 | //config: which would break ash if you select N here. | ||
49 | //config: | ||
50 | //config:config ASH_BASH_COMPAT | ||
51 | //config: bool "bash-compatible extensions" | ||
52 | //config: default y | ||
53 | //config: depends on ASH || SH_IS_ASH || BASH_IS_ASH | ||
54 | //config: | ||
55 | //config:config ASH_JOB_CONTROL | ||
56 | //config: bool "Job control" | ||
57 | //config: default y | ||
58 | //config: depends on ASH || SH_IS_ASH || BASH_IS_ASH | ||
59 | //config: | ||
60 | //config:config ASH_ALIAS | ||
61 | //config: bool "Alias support" | ||
62 | //config: default y | ||
63 | //config: depends on ASH || SH_IS_ASH || BASH_IS_ASH | ||
49 | //config: | 64 | //config: |
50 | //config:config ASH_RANDOM_SUPPORT | 65 | //config:config ASH_RANDOM_SUPPORT |
51 | //config: bool "Pseudorandom generator and $RANDOM variable" | 66 | //config: bool "Pseudorandom generator and $RANDOM variable" |
@@ -63,88 +78,60 @@ | |||
63 | //config: default y | 78 | //config: default y |
64 | //config: depends on ASH || SH_IS_ASH || BASH_IS_ASH | 79 | //config: depends on ASH || SH_IS_ASH || BASH_IS_ASH |
65 | //config: help | 80 | //config: help |
66 | //config: "PS#" may contain volatile content, such as backquote commands. | 81 | //config: $PS# may contain volatile content, such as backquote commands. |
67 | //config: This option recreates the prompt string from the environment | 82 | //config: This option recreates the prompt string from the environment |
68 | //config: variable each time it is displayed. | 83 | //config: variable each time it is displayed. |
69 | //config: | 84 | //config: |
70 | //config:config ASH_BASH_COMPAT | ||
71 | //config: bool "bash-compatible extensions" | ||
72 | //config: default y | ||
73 | //config: depends on ASH || SH_IS_ASH || BASH_IS_ASH | ||
74 | //config: help | ||
75 | //config: Enable bash-compatible extensions. | ||
76 | //config: | ||
77 | //config:config ASH_IDLE_TIMEOUT | 85 | //config:config ASH_IDLE_TIMEOUT |
78 | //config: bool "Idle timeout variable" | 86 | //config: bool "Idle timeout variable $TMOUT" |
79 | //config: default n | ||
80 | //config: depends on ASH || SH_IS_ASH || BASH_IS_ASH | ||
81 | //config: help | ||
82 | //config: Enables bash-like auto-logout after $TMOUT seconds of idle time. | ||
83 | //config: | ||
84 | //config:config ASH_JOB_CONTROL | ||
85 | //config: bool "Job control" | ||
86 | //config: default y | ||
87 | //config: depends on ASH || SH_IS_ASH || BASH_IS_ASH | ||
88 | //config: help | ||
89 | //config: Enable job control in the ash shell. | ||
90 | //config: | ||
91 | //config:config ASH_ALIAS | ||
92 | //config: bool "Alias support" | ||
93 | //config: default y | 87 | //config: default y |
94 | //config: depends on ASH || SH_IS_ASH || BASH_IS_ASH | 88 | //config: depends on ASH || SH_IS_ASH || BASH_IS_ASH |
95 | //config: help | 89 | //config: help |
96 | //config: Enable alias support in the ash shell. | 90 | //config: Enable bash-like auto-logout after $TMOUT seconds of idle time. |
97 | //config: | 91 | //config: |
98 | //config:config ASH_GETOPTS | 92 | //config:config ASH_MAIL |
99 | //config: bool "Builtin getopt to parse positional parameters" | 93 | //config: bool "Check for new mail in interactive shell" |
100 | //config: default y | 94 | //config: default y |
101 | //config: depends on ASH || SH_IS_ASH || BASH_IS_ASH | 95 | //config: depends on ASH || SH_IS_ASH || BASH_IS_ASH |
102 | //config: help | 96 | //config: help |
103 | //config: Enable support for getopts builtin in ash. | 97 | //config: Enable "check for new mail" function: |
98 | //config: if set, $MAIL file and $MAILPATH list of files | ||
99 | //config: are checked for mtime changes, and "you have mail" | ||
100 | //config: message is printed if change is detected. | ||
104 | //config: | 101 | //config: |
105 | //config:config ASH_BUILTIN_ECHO | 102 | //config:config ASH_BUILTIN_ECHO |
106 | //config: bool "Builtin version of 'echo'" | 103 | //config: bool "echo builtin" |
107 | //config: default y | 104 | //config: default y |
108 | //config: depends on ASH || SH_IS_ASH || BASH_IS_ASH | 105 | //config: depends on ASH || SH_IS_ASH || BASH_IS_ASH |
109 | //config: help | ||
110 | //config: Enable support for echo builtin in ash. | ||
111 | //config: | 106 | //config: |
112 | //config:config ASH_BUILTIN_PRINTF | 107 | //config:config ASH_BUILTIN_PRINTF |
113 | //config: bool "Builtin version of 'printf'" | 108 | //config: bool "printf builtin" |
114 | //config: default y | 109 | //config: default y |
115 | //config: depends on ASH || SH_IS_ASH || BASH_IS_ASH | 110 | //config: depends on ASH || SH_IS_ASH || BASH_IS_ASH |
116 | //config: help | ||
117 | //config: Enable support for printf builtin in ash. | ||
118 | //config: | 111 | //config: |
119 | //config:config ASH_BUILTIN_TEST | 112 | //config:config ASH_BUILTIN_TEST |
120 | //config: bool "Builtin version of 'test'" | 113 | //config: bool "test builtin" |
121 | //config: default y | 114 | //config: default y |
122 | //config: depends on ASH || SH_IS_ASH || BASH_IS_ASH | 115 | //config: depends on ASH || SH_IS_ASH || BASH_IS_ASH |
123 | //config: help | ||
124 | //config: Enable support for test builtin in ash. | ||
125 | //config: | 116 | //config: |
126 | //config:config ASH_HELP | 117 | //config:config ASH_HELP |
127 | //config: bool "help builtin" | 118 | //config: bool "help builtin" |
128 | //config: default y | 119 | //config: default y |
129 | //config: depends on ASH || SH_IS_ASH || BASH_IS_ASH | 120 | //config: depends on ASH || SH_IS_ASH || BASH_IS_ASH |
130 | //config: help | ||
131 | //config: Enable help builtin in ash. | ||
132 | //config: | 121 | //config: |
133 | //config:config ASH_CMDCMD | 122 | //config:config ASH_GETOPTS |
134 | //config: bool "'command' command to override shell builtins" | 123 | //config: bool "getopts builtin" |
135 | //config: default y | 124 | //config: default y |
136 | //config: depends on ASH || SH_IS_ASH || BASH_IS_ASH | 125 | //config: depends on ASH || SH_IS_ASH || BASH_IS_ASH |
137 | //config: help | ||
138 | //config: Enable support for the ash 'command' builtin, which allows | ||
139 | //config: you to run the specified command with the specified arguments, | ||
140 | //config: even when there is an ash builtin command with the same name. | ||
141 | //config: | 126 | //config: |
142 | //config:config ASH_MAIL | 127 | //config:config ASH_CMDCMD |
143 | //config: bool "Check for new mail on interactive shells" | 128 | //config: bool "command builtin" |
144 | //config: default y | 129 | //config: default y |
145 | //config: depends on ASH || SH_IS_ASH || BASH_IS_ASH | 130 | //config: depends on ASH || SH_IS_ASH || BASH_IS_ASH |
146 | //config: help | 131 | //config: help |
147 | //config: Enable "check for new mail" function in the ash shell. | 132 | //config: Enable support for the 'command' builtin, which allows |
133 | //config: you to run the specified command or builtin, | ||
134 | //config: even when there is a function with the same name. | ||
148 | //config: | 135 | //config: |
149 | //config:endif # ash options | 136 | //config:endif # ash options |
150 | 137 | ||
diff --git a/shell/hush.c b/shell/hush.c index 22d71cb07..9e508fc6d 100644 --- a/shell/hush.c +++ b/shell/hush.c | |||
@@ -99,8 +99,6 @@ | |||
99 | //config: bool "bash-compatible extensions" | 99 | //config: bool "bash-compatible extensions" |
100 | //config: default y | 100 | //config: default y |
101 | //config: depends on HUSH || SH_IS_HUSH || BASH_IS_HUSH | 101 | //config: depends on HUSH || SH_IS_HUSH || BASH_IS_HUSH |
102 | //config: help | ||
103 | //config: Enable bash-compatible extensions. | ||
104 | //config: | 102 | //config: |
105 | //config:config HUSH_BRACE_EXPANSION | 103 | //config:config HUSH_BRACE_EXPANSION |
106 | //config: bool "Brace expansion" | 104 | //config: bool "Brace expansion" |
@@ -123,8 +121,6 @@ | |||
123 | //config: bool "Save command history to .hush_history" | 121 | //config: bool "Save command history to .hush_history" |
124 | //config: default y | 122 | //config: default y |
125 | //config: depends on HUSH_INTERACTIVE && FEATURE_EDITING_SAVEHISTORY | 123 | //config: depends on HUSH_INTERACTIVE && FEATURE_EDITING_SAVEHISTORY |
126 | //config: help | ||
127 | //config: Enable history saving in hush. | ||
128 | //config: | 124 | //config: |
129 | //config:config HUSH_JOB | 125 | //config:config HUSH_JOB |
130 | //config: bool "Job control" | 126 | //config: bool "Job control" |
@@ -138,39 +134,35 @@ | |||
138 | //config: but no separate process group is formed. | 134 | //config: but no separate process group is formed. |
139 | //config: | 135 | //config: |
140 | //config:config HUSH_TICK | 136 | //config:config HUSH_TICK |
141 | //config: bool "Process substitution" | 137 | //config: bool "Support process substitution" |
142 | //config: default y | 138 | //config: default y |
143 | //config: depends on HUSH || SH_IS_HUSH || BASH_IS_HUSH | 139 | //config: depends on HUSH || SH_IS_HUSH || BASH_IS_HUSH |
144 | //config: help | 140 | //config: help |
145 | //config: Enable process substitution `command` and $(command) in hush. | 141 | //config: Enable `command` and $(command). |
146 | //config: | 142 | //config: |
147 | //config:config HUSH_IF | 143 | //config:config HUSH_IF |
148 | //config: bool "Support if/then/elif/else/fi" | 144 | //config: bool "Support if/then/elif/else/fi" |
149 | //config: default y | 145 | //config: default y |
150 | //config: depends on HUSH || SH_IS_HUSH || BASH_IS_HUSH | 146 | //config: depends on HUSH || SH_IS_HUSH || BASH_IS_HUSH |
151 | //config: help | ||
152 | //config: Enable if/then/elif/else/fi in hush. | ||
153 | //config: | 147 | //config: |
154 | //config:config HUSH_LOOPS | 148 | //config:config HUSH_LOOPS |
155 | //config: bool "Support for, while and until loops" | 149 | //config: bool "Support for, while and until loops" |
156 | //config: default y | 150 | //config: default y |
157 | //config: depends on HUSH || SH_IS_HUSH || BASH_IS_HUSH | 151 | //config: depends on HUSH || SH_IS_HUSH || BASH_IS_HUSH |
158 | //config: help | ||
159 | //config: Enable for, while and until loops in hush. | ||
160 | //config: | 152 | //config: |
161 | //config:config HUSH_CASE | 153 | //config:config HUSH_CASE |
162 | //config: bool "Support case ... esac statement" | 154 | //config: bool "Support case ... esac statement" |
163 | //config: default y | 155 | //config: default y |
164 | //config: depends on HUSH || SH_IS_HUSH || BASH_IS_HUSH | 156 | //config: depends on HUSH || SH_IS_HUSH || BASH_IS_HUSH |
165 | //config: help | 157 | //config: help |
166 | //config: Enable case ... esac statement in hush. +400 bytes. | 158 | //config: Enable case ... esac statement. +400 bytes. |
167 | //config: | 159 | //config: |
168 | //config:config HUSH_FUNCTIONS | 160 | //config:config HUSH_FUNCTIONS |
169 | //config: bool "Support funcname() { commands; } syntax" | 161 | //config: bool "Support funcname() { commands; } syntax" |
170 | //config: default y | 162 | //config: default y |
171 | //config: depends on HUSH || SH_IS_HUSH || BASH_IS_HUSH | 163 | //config: depends on HUSH || SH_IS_HUSH || BASH_IS_HUSH |
172 | //config: help | 164 | //config: help |
173 | //config: Enable support for shell functions in hush. +800 bytes. | 165 | //config: Enable support for shell functions. +800 bytes. |
174 | //config: | 166 | //config: |
175 | //config:config HUSH_LOCAL | 167 | //config:config HUSH_LOCAL |
176 | //config: bool "local builtin" | 168 | //config: bool "local builtin" |
@@ -199,22 +191,21 @@ | |||
199 | //config: bool "echo builtin" | 191 | //config: bool "echo builtin" |
200 | //config: default y | 192 | //config: default y |
201 | //config: depends on HUSH || SH_IS_HUSH || BASH_IS_HUSH | 193 | //config: depends on HUSH || SH_IS_HUSH || BASH_IS_HUSH |
202 | //config: help | ||
203 | //config: Enable echo builtin in hush. | ||
204 | //config: | 194 | //config: |
205 | //config:config HUSH_PRINTF | 195 | //config:config HUSH_PRINTF |
206 | //config: bool "printf builtin" | 196 | //config: bool "printf builtin" |
207 | //config: default y | 197 | //config: default y |
208 | //config: depends on HUSH || SH_IS_HUSH || BASH_IS_HUSH | 198 | //config: depends on HUSH || SH_IS_HUSH || BASH_IS_HUSH |
209 | //config: help | 199 | //config: |
210 | //config: Enable printf builtin in hush. | 200 | //config:config HUSH_HELP |
201 | //config: bool "help builtin" | ||
202 | //config: default y | ||
203 | //config: depends on HUSH || SH_IS_HUSH || BASH_IS_HUSH | ||
211 | //config: | 204 | //config: |
212 | //config:config HUSH_EXPORT | 205 | //config:config HUSH_EXPORT |
213 | //config: bool "export builtin" | 206 | //config: bool "export builtin" |
214 | //config: default y | 207 | //config: default y |
215 | //config: depends on HUSH || SH_IS_HUSH || BASH_IS_HUSH | 208 | //config: depends on HUSH || SH_IS_HUSH || BASH_IS_HUSH |
216 | //config: help | ||
217 | //config: Enable export builtin in hush. | ||
218 | //config: | 209 | //config: |
219 | //config:config HUSH_EXPORT_N | 210 | //config:config HUSH_EXPORT_N |
220 | //config: bool "Support 'export -n' option" | 211 | //config: bool "Support 'export -n' option" |
@@ -223,82 +214,55 @@ | |||
223 | //config: help | 214 | //config: help |
224 | //config: export -n unexports variables. It is a bash extension. | 215 | //config: export -n unexports variables. It is a bash extension. |
225 | //config: | 216 | //config: |
226 | //config:config HUSH_HELP | ||
227 | //config: bool "help builtin" | ||
228 | //config: default y | ||
229 | //config: depends on HUSH || SH_IS_HUSH || BASH_IS_HUSH | ||
230 | //config: help | ||
231 | //config: Enable help builtin in hush. Code size + ~1 kbyte. | ||
232 | //config: | ||
233 | //config:config HUSH_KILL | 217 | //config:config HUSH_KILL |
234 | //config: bool "kill builtin (for kill %jobspec)" | 218 | //config: bool "kill builtin (supports kill %jobspec)" |
235 | //config: default y | 219 | //config: default y |
236 | //config: depends on HUSH || SH_IS_HUSH || BASH_IS_HUSH | 220 | //config: depends on HUSH || SH_IS_HUSH || BASH_IS_HUSH |
237 | //config: help | ||
238 | //config: Enable kill builtin in hush. | ||
239 | //config: | 221 | //config: |
240 | //config:config HUSH_WAIT | 222 | //config:config HUSH_WAIT |
241 | //config: bool "wait builtin" | 223 | //config: bool "wait builtin" |
242 | //config: default y | 224 | //config: default y |
243 | //config: depends on HUSH || SH_IS_HUSH || BASH_IS_HUSH | 225 | //config: depends on HUSH || SH_IS_HUSH || BASH_IS_HUSH |
244 | //config: help | ||
245 | //config: Enable wait builtin in hush. | ||
246 | //config: | 226 | //config: |
247 | //config:config HUSH_TRAP | 227 | //config:config HUSH_TRAP |
248 | //config: bool "trap builtin" | 228 | //config: bool "trap builtin" |
249 | //config: default y | 229 | //config: default y |
250 | //config: depends on HUSH || SH_IS_HUSH || BASH_IS_HUSH | 230 | //config: depends on HUSH || SH_IS_HUSH || BASH_IS_HUSH |
251 | //config: help | ||
252 | //config: Enable trap builtin in hush. | ||
253 | //config: | ||
254 | //config:config HUSH_ULIMIT | ||
255 | //config: bool "ulimit builtin" | ||
256 | //config: default y | ||
257 | //config: depends on HUSH || SH_IS_HUSH || BASH_IS_HUSH | ||
258 | //config: help | ||
259 | //config: Enable ulimit builtin in hush. | ||
260 | //config: | 231 | //config: |
261 | //config:config HUSH_TYPE | 232 | //config:config HUSH_TYPE |
262 | //config: bool "type builtin" | 233 | //config: bool "type builtin" |
263 | //config: default y | 234 | //config: default y |
264 | //config: depends on HUSH || SH_IS_HUSH || BASH_IS_HUSH | 235 | //config: depends on HUSH || SH_IS_HUSH || BASH_IS_HUSH |
265 | //config: help | ||
266 | //config: Enable type builtin in hush. | ||
267 | //config: | 236 | //config: |
268 | //config:config HUSH_READ | 237 | //config:config HUSH_READ |
269 | //config: bool "read builtin" | 238 | //config: bool "read builtin" |
270 | //config: default y | 239 | //config: default y |
271 | //config: depends on HUSH || SH_IS_HUSH || BASH_IS_HUSH | 240 | //config: depends on HUSH || SH_IS_HUSH || BASH_IS_HUSH |
272 | //config: help | ||
273 | //config: Enable read builtin in hush. | ||
274 | //config: | 241 | //config: |
275 | //config:config HUSH_SET | 242 | //config:config HUSH_SET |
276 | //config: bool "set builtin" | 243 | //config: bool "set builtin" |
277 | //config: default y | 244 | //config: default y |
278 | //config: depends on HUSH || SH_IS_HUSH || BASH_IS_HUSH | 245 | //config: depends on HUSH || SH_IS_HUSH || BASH_IS_HUSH |
279 | //config: help | ||
280 | //config: Enable set builtin in hush. | ||
281 | //config: | 246 | //config: |
282 | //config:config HUSH_UNSET | 247 | //config:config HUSH_UNSET |
283 | //config: bool "unset builtin" | 248 | //config: bool "unset builtin" |
284 | //config: default y | 249 | //config: default y |
285 | //config: depends on HUSH || SH_IS_HUSH || BASH_IS_HUSH | 250 | //config: depends on HUSH || SH_IS_HUSH || BASH_IS_HUSH |
286 | //config: help | 251 | //config: |
287 | //config: Enable unset builtin in hush. | 252 | //config:config HUSH_ULIMIT |
253 | //config: bool "ulimit builtin" | ||
254 | //config: default y | ||
255 | //config: depends on HUSH || SH_IS_HUSH || BASH_IS_HUSH | ||
288 | //config: | 256 | //config: |
289 | //config:config HUSH_UMASK | 257 | //config:config HUSH_UMASK |
290 | //config: bool "umask builtin" | 258 | //config: bool "umask builtin" |
291 | //config: default y | 259 | //config: default y |
292 | //config: depends on HUSH || SH_IS_HUSH || BASH_IS_HUSH | 260 | //config: depends on HUSH || SH_IS_HUSH || BASH_IS_HUSH |
293 | //config: help | ||
294 | //config: Enable umask builtin in hush. | ||
295 | //config: | 261 | //config: |
296 | //config:config HUSH_MEMLEAK | 262 | //config:config HUSH_MEMLEAK |
297 | //config: bool "memleak builtin (debugging)" | 263 | //config: bool "memleak builtin (debugging)" |
298 | //config: default n | 264 | //config: default n |
299 | //config: depends on HUSH || SH_IS_HUSH || BASH_IS_HUSH | 265 | //config: depends on HUSH || SH_IS_HUSH || BASH_IS_HUSH |
300 | //config: help | ||
301 | //config: Enable memleak builtin in hush. | ||
302 | //config: | 266 | //config: |
303 | //config:config MSH | 267 | //config:config MSH |
304 | //config: bool "msh (deprecated: aliased to hush)" | 268 | //config: bool "msh (deprecated: aliased to hush)" |
@@ -1096,8 +1060,6 @@ static const struct built_in_command bltins1[] = { | |||
1096 | BLTIN("wait" , builtin_wait , "Wait for process"), | 1060 | BLTIN("wait" , builtin_wait , "Wait for process"), |
1097 | #endif | 1061 | #endif |
1098 | }; | 1062 | }; |
1099 | /* For now, echo and test are unconditionally enabled. | ||
1100 | * Maybe make it configurable? */ | ||
1101 | static const struct built_in_command bltins2[] = { | 1063 | static const struct built_in_command bltins2[] = { |
1102 | BLTIN("[" , builtin_test , NULL), | 1064 | BLTIN("[" , builtin_test , NULL), |
1103 | #if ENABLE_HUSH_ECHO | 1065 | #if ENABLE_HUSH_ECHO |