966fa7012680b50e130fb386795408fefbca787b
[platform/upstream/busybox.git] / shell / Config.src
1 #
2 # For a description of the syntax of this configuration file,
3 # see scripts/kbuild/config-language.txt.
4 #
5
6 menu "Shells"
7
8 config ASH
9         bool "ash"
10         default y
11         depends on !NOMMU
12         help
13           Tha 'ash' shell adds about 60k in the default configuration and is
14           the most complete and most pedantically correct shell included with
15           busybox. This shell is actually a derivative of the Debian 'dash'
16           shell (by Herbert Xu), which was created by porting the 'ash' shell
17           (written by Kenneth Almquist) from NetBSD.
18
19 config ASH_BASH_COMPAT
20         bool "bash-compatible extensions"
21         default y
22         depends on ASH
23         help
24           Enable bash-compatible extensions.
25
26 config ASH_JOB_CONTROL
27         bool "Job control"
28         default y
29         depends on ASH
30         help
31           Enable job control in the ash shell.
32
33 config ASH_ALIAS
34         bool "alias support"
35         default y
36         depends on ASH
37         help
38           Enable alias support in the ash shell.
39
40 config ASH_GETOPTS
41         bool "Builtin getopt to parse positional parameters"
42         default y
43         depends on ASH
44         help
45           Enable getopts builtin in the ash shell.
46
47 config ASH_BUILTIN_ECHO
48         bool "Builtin version of 'echo'"
49         default y
50         depends on ASH
51         help
52           Enable support for echo, builtin to ash.
53
54 config ASH_BUILTIN_PRINTF
55         bool "Builtin version of 'printf'"
56         default y
57         depends on ASH
58         help
59           Enable support for printf, builtin to ash.
60
61 config ASH_BUILTIN_TEST
62         bool "Builtin version of 'test'"
63         default y
64         depends on ASH
65         help
66           Enable support for test, builtin to ash.
67
68 config ASH_CMDCMD
69         bool "'command' command to override shell builtins"
70         default y
71         depends on ASH
72         help
73           Enable support for the ash 'command' builtin, which allows
74           you to run the specified command with the specified arguments,
75           even when there is an ash builtin command with the same name.
76
77 config ASH_MAIL
78         bool "Check for new mail on interactive shells"
79         default n
80         depends on ASH
81         help
82           Enable "check for new mail" in the ash shell.
83
84 config ASH_OPTIMIZE_FOR_SIZE
85         bool "Optimize for size instead of speed"
86         default y
87         depends on ASH
88         help
89           Compile ash for reduced size at the price of speed.
90
91 config ASH_RANDOM_SUPPORT
92         bool "Pseudorandom generator and $RANDOM variable"
93         default y
94         depends on ASH
95         help
96           Enable pseudorandom generator and dynamic variable "$RANDOM".
97           Each read of "$RANDOM" will generate a new pseudorandom value.
98           You can reset the generator by using a specified start value.
99           After "unset RANDOM" the generator will switch off and this
100           variable will no longer have special treatment.
101
102 config ASH_EXPAND_PRMT
103         bool "Expand prompt string"
104         default y
105         depends on ASH
106         help
107           "PS#" may contain volatile content, such as backquote commands.
108           This option recreates the prompt string from the environment
109           variable each time it is displayed.
110
111 config HUSH
112         bool "hush"
113         default y
114         help
115           hush is a small shell (22k). It handles the normal flow control
116           constructs such as if/then/elif/else/fi, for/in/do/done, while loops,
117           case/esac. Redirections, here documents, $((arithmetic))
118           and functions are supported.
119
120           It will compile and work on no-mmu systems.
121
122           It does not handle select, aliases, brace expansion,
123           tilde expansion, &>file and >&file redirection of stdout+stderr.
124
125 config HUSH_BASH_COMPAT
126         bool "bash-compatible extensions"
127         default y
128         depends on HUSH
129         help
130           Enable bash-compatible extensions.
131
132 config HUSH_HELP
133         bool "help builtin"
134         default y
135         depends on HUSH
136         help
137           Enable help builtin in hush. Code size + ~1 kbyte.
138
139 config HUSH_INTERACTIVE
140         bool "Interactive mode"
141         default y
142         depends on HUSH
143         help
144           Enable interactive mode (prompt and command editing).
145           Without this, hush simply reads and executes commands
146           from stdin just like a shell script from a file.
147           No prompt, no PS1/PS2 magic shell variables.
148
149 config HUSH_JOB
150         bool "Job control"
151         default y
152         depends on HUSH_INTERACTIVE
153         help
154           Enable job control: Ctrl-Z backgrounds, Ctrl-C interrupts current
155           command (not entire shell), fg/bg builtins work. Without this option,
156           "cmd &" still works by simply spawning a process and immediately
157           prompting for next command (or executing next command in a script),
158           but no separate process group is formed.
159
160 config HUSH_TICK
161         bool "Process substitution"
162         default y
163         depends on HUSH
164         help
165           Enable process substitution `command` and $(command) in hush.
166
167 config HUSH_IF
168         bool "Support if/then/elif/else/fi"
169         default y
170         depends on HUSH
171         help
172           Enable if/then/elif/else/fi in hush.
173
174 config HUSH_LOOPS
175         bool "Support for, while and until loops"
176         default y
177         depends on HUSH
178         help
179           Enable for, while and until loops in hush.
180
181 config HUSH_CASE
182         bool "Support case ... esac statement"
183         default y
184         depends on HUSH
185         help
186           Enable case ... esac statement in hush. +400 bytes.
187
188 config HUSH_FUNCTIONS
189         bool "Support funcname() { commands; } syntax"
190         default y
191         depends on HUSH
192         help
193           Enable support for shell functions in hush. +800 bytes.
194
195 config HUSH_LOCAL
196         bool "Support local builtin"
197         default y
198         depends on HUSH_FUNCTIONS
199         help
200           Enable support for local variables in functions.
201
202 config HUSH_EXPORT_N
203         bool "Support export '-n' option"
204         default y
205         depends on HUSH
206         help
207           Enable support for export '-n' option in hush. It is a bash extension.
208
209 config HUSH_RANDOM_SUPPORT
210         bool "Pseudorandom generator and $RANDOM variable"
211         default y
212         depends on HUSH
213         help
214           Enable pseudorandom generator and dynamic variable "$RANDOM".
215           Each read of "$RANDOM" will generate a new pseudorandom value.
216
217
218 choice
219         prompt "Choose which shell is aliased to 'sh' name"
220         default FEATURE_SH_IS_ASH
221         help
222           Choose which shell you want to be executed by 'sh' alias.
223           The ash shell is the most bash compatible and full featured one.
224
225 # note: cannot use "select ASH" here, it breaks "make allnoconfig"
226 config FEATURE_SH_IS_ASH
227         depends on ASH
228         bool "ash"
229         depends on !NOMMU
230
231 config FEATURE_SH_IS_HUSH
232         depends on HUSH
233         bool "hush"
234
235 config FEATURE_SH_IS_NONE
236         bool "none"
237
238 endchoice
239
240 choice
241         prompt "Choose which shell is aliased to 'bash' name"
242         default FEATURE_BASH_IS_NONE
243         help
244           Choose which shell you want to be executed by 'bash' alias.
245           The ash shell is the most bash compatible and full featured one.
246
247           Note that selecting this option does not switch on any bash
248           compatibility code. It merely makes it possible to install
249           /bin/bash (sym)link and run scripts which start with
250           #!/bin/bash line.
251
252           Many systems use it in scripts which use bash-specific features,
253           even simple ones like $RANDOM. Without this option, busybox
254           can't be used for running them because it won't recongnize
255           "bash" as a supported applet name.
256
257 config FEATURE_BASH_IS_ASH
258         depends on ASH
259         bool "ash"
260         depends on !NOMMU
261
262 config FEATURE_BASH_IS_HUSH
263         depends on HUSH
264         bool "hush"
265
266 config FEATURE_BASH_IS_NONE
267         bool "none"
268
269 endchoice
270
271
272 config LASH
273         bool "lash (deprecated: aliased to hush)"
274         default n
275         select HUSH
276         help
277           lash is deprecated and will be removed, please migrate to hush.
278
279 config MSH
280         bool "msh (deprecated: please use hush)"
281         default n
282         select HUSH
283         help
284           msh is deprecated and will be removed, please migrate to hush.
285           If there is a feature msh has but hush does not, please let us know.
286
287 #         The minix shell (adds just 30k) is quite complete and handles things
288 #         like for/do/done, case/esac and all the things you expect a Bourne
289 #         shell to do. It is not always pedantically correct about Bourne
290 #         shell grammar (try running the shell testscript "tests/sh.testcases"
291 #         on it and compare vs bash) but for most things it works quite well.
292 #         It uses only vfork, so it can be used on uClinux systems.
293
294
295 config SH_MATH_SUPPORT
296         bool "POSIX math support"
297         default y
298         depends on ASH || HUSH
299         help
300           Enable math support in the shell via $((...)) syntax.
301
302 config SH_MATH_SUPPORT_64
303         bool "Extend POSIX math support to 64 bit"
304         default y
305         depends on SH_MATH_SUPPORT
306         help
307           Enable 64-bit math support in the shell. This will make the shell
308           slightly larger, but will allow computation with very large numbers.
309           This is not in POSIX, so do not rely on this in portable code.
310
311 config FEATURE_SH_EXTRA_QUIET
312         bool "Hide message on interactive shell startup"
313         default y
314         depends on HUSH || ASH
315         help
316           Remove the busybox introduction when starting a shell.
317
318 config FEATURE_SH_STANDALONE
319         bool "Standalone shell"
320         default n
321         depends on (HUSH || ASH) && FEATURE_PREFER_APPLETS
322         help
323           This option causes busybox shells to use busybox applets
324           in preference to executables in the PATH whenever possible. For
325           example, entering the command 'ifconfig' into the shell would cause
326           busybox to use the ifconfig busybox applet. Specifying the fully
327           qualified executable name, such as '/sbin/ifconfig' will still
328           execute the /sbin/ifconfig executable on the filesystem. This option
329           is generally used when creating a statically linked version of busybox
330           for use as a rescue shell, in the event that you screw up your system.
331
332           This is implemented by re-execing /proc/self/exe (typically)
333           with right parameters. Some selected applets ("NOFORK" applets)
334           can even be executed without creating new process.
335           Instead, busybox will call <applet>_main() internally.
336
337           However, this causes problems in chroot jails without mounted /proc
338           and with ps/top (command name can be shown as 'exe' for applets
339           started this way).
340 # untrue?
341 #         Note that this will *also* cause applets to take precedence
342 #         over shell builtins of the same name. So turning this on will
343 #         eliminate any performance gained by turning on the builtin "echo"
344 #         and "test" commands in ash.
345 # untrue?
346 #         Note that when using this option, the shell will attempt to directly
347 #         run '/bin/busybox'. If you do not have the busybox binary sitting in
348 #         that exact location with that exact name, this option will not work at
349 #         all.
350
351 config FEATURE_SH_NOFORK
352         bool "Run 'nofork' applets directly"
353         default n
354         depends on (HUSH || ASH) && FEATURE_PREFER_APPLETS
355         help
356           This option causes busybox shells [currently only ash]
357           to not execute typical fork/exec/wait sequence, but call <applet>_main
358           directly, if possible. (Sometimes it is not possible: for example,
359           this is not possible in pipes).
360
361           This will be done only for some applets (those which are marked
362           NOFORK in include/applets.h).
363
364           This may significantly speed up some shell scripts.
365
366           This feature is relatively new. Use with care.
367
368 config CTTYHACK
369         bool "cttyhack"
370         default y
371         help
372           One common problem reported on the mailing list is "can't access tty;
373           job control turned off" error message which typically appears when
374           one tries to use shell with stdin/stdout opened to /dev/console.
375           This device is special - it cannot be a controlling tty.
376
377           Proper solution is to use correct device instead of /dev/console.
378
379           cttyhack provides "quick and dirty" solution to this problem.
380           It analyzes stdin with various ioctls, trying to determine whether
381           it is a /dev/ttyN or /dev/ttySN (virtual terminal or serial line).
382           If it detects one, it closes stdin/out/err and reopens that device.
383           Then it executes given program. Opening the device will make
384           that device a controlling tty. This may require cttyhack
385           to be a session leader.
386
387           Example for /etc/inittab (for busybox init):
388
389           ::respawn:/bin/cttyhack /bin/sh
390
391           Giving controlling tty to shell running with PID 1:
392
393           $ exec cttyhack sh
394
395           Starting an interactive shell from boot shell script:
396
397           setsid cttyhack sh
398
399 endmenu