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