]>
Commit | Line | Data |
---|---|---|
726f6388 JA |
1 | .de SE \" start example |
2 | .sp .5 | |
3 | .RS | |
4 | .ft CR | |
5 | .nf | |
6 | .. | |
7 | .de EE \" end example | |
8 | .fi | |
9 | .sp .5 | |
10 | .RE | |
11 | .ft R | |
12 | .. | |
13 | .TL | |
14 | Bash \- The GNU shell* | |
15 | .AU | |
16 | Chet Ramey | |
17 | Case Western Reserve University | |
18 | chet@po.cwru.edu | |
19 | .FS | |
20 | *An earlier version of this article appeared in The Linux Journal. | |
21 | .FE | |
22 | .NH 1 | |
23 | Introduction | |
24 | .PP | |
25 | .B Bash | |
26 | is the shell, or command language interpreter, | |
27 | that will appear in the GNU operating system. | |
28 | The name is an acronym for | |
29 | the \*QBourne-Again SHell\*U, a pun on Steve Bourne, the author | |
30 | of the direct ancestor of the current | |
31 | .UX | |
32 | shell \fI/bin/sh\fP, | |
33 | which appeared in the Seventh Edition Bell Labs Research version | |
34 | of \s-1UNIX\s+1. | |
35 | .PP | |
36 | Bash is an \fBsh\fP\-compatible shell that incorporates useful | |
37 | features from the Korn shell (\fBksh\fP) and the C shell (\fBcsh\fP), | |
38 | described later in this article. It is ultimately intended to be a | |
39 | conformant implementation of the IEEE POSIX Shell and Utilities | |
40 | specification (IEEE Working Group 1003.2). It offers functional | |
41 | improvements over sh for both interactive and programming use. | |
42 | .PP | |
43 | While the GNU operating system will most likely include a version | |
44 | of the Berkeley shell csh, Bash will be the default shell. | |
45 | Like other GNU software, Bash is quite portable. It currently runs | |
46 | on nearly every version of | |
47 | .UX | |
48 | and a few other operating systems \- an independently-supported | |
49 | port exists for OS/2, and there are rumors of ports to DOS and | |
50 | Windows NT. Ports to \s-1UNIX\s+1-like systems such as QNX and Minix | |
51 | are part of the distribution. | |
52 | .PP | |
53 | The original author of Bash | |
54 | was Brian Fox, an employee of the Free Software Foundation. The | |
55 | current developer and maintainer is Chet Ramey, a volunteer who | |
56 | works at Case Western Reserve University. | |
57 | .NH 1 | |
58 | What's POSIX, anyway? | |
59 | .PP | |
60 | .I POSIX | |
61 | is a name originally coined by Richard Stallman for a family of open | |
62 | system standards based on \s-1UNIX\s+1. There are a number of aspects of \s-1UNIX\s+1 | |
63 | under consideration for standardization, from the basic system services | |
64 | at the system call and C library level to applications and tools to system | |
65 | administration and management. Each area of standardization is | |
66 | assigned to a working group in the 1003 series. | |
67 | .PP | |
68 | The POSIX Shell and Utilities standard has been developed by IEEE Working | |
69 | Group 1003.2 (POSIX.2).\(dd | |
70 | .FS | |
71 | \(ddIEEE, \fIIEEE Standard for Information Technology -- Portable | |
72 | Operating System Interface (POSIX) Part 2: Shell and Utilities\fP, | |
73 | 1992. | |
74 | .FE | |
75 | It concentrates on the command interpreter | |
76 | interface and utility programs | |
77 | commonly executed from the command line or by other programs. | |
78 | An initial version of the standard has been | |
79 | approved and published by the IEEE, and work is currently underway to | |
80 | update it. | |
81 | There are four primary areas of work in the 1003.2 standard: | |
82 | .IP \(bu | |
83 | Aspects of the shell's syntax and command language. | |
84 | A number of special builtins such as | |
85 | .B cd | |
86 | and | |
87 | .B exec | |
88 | are being specified as part of the shell, since their | |
89 | functionality usually cannot be implemented by a separate executable; | |
90 | .IP \(bu | |
91 | A set of utilities to be called by shell scripts and applications. | |
92 | Examples are programs like | |
93 | .I sed, | |
94 | .I tr, | |
95 | and | |
96 | .I awk. | |
97 | Utilities commonly implemented as shell builtins | |
98 | are described in this section, such as | |
99 | .B test | |
100 | and | |
101 | .B kill . | |
102 | An expansion of this section's scope, termed the User Portability | |
103 | Extension, or UPE, has standardized interactive programs such as | |
104 | .I vi | |
105 | and | |
106 | .I mailx; | |
107 | .IP \(bu | |
108 | A group of functional interfaces to services provided by the | |
109 | shell, such as the traditional \f(CRsystem()\fP | |
110 | C library function. There are functions to perform shell word | |
111 | expansions, perform filename expansion (\fIglobbing\fP), obtain values | |
112 | of POSIX.2 system configuration variables, retrieve values of | |
113 | environment variables (\f(CRgetenv()\fP\^), and other services; | |
114 | .IP \(bu | |
115 | A suite of \*Qdevelopment\*U utilities such as | |
116 | .I c89 | |
117 | (the POSIX.2 version of \fIcc\fP), | |
118 | and | |
119 | .I yacc. | |
120 | .PP | |
121 | Bash is concerned with the aspects of the shell's behavior | |
122 | defined by POSIX.2. The shell command language has of | |
123 | course been standardized, including the basic flow control | |
124 | and program execution constructs, I/O redirection and | |
125 | pipelining, argument handling, variable expansion, and quoting. | |
126 | The | |
127 | .I special | |
128 | builtins, which must be implemented as part of the shell to | |
129 | provide the desired functionality, are specified as being | |
130 | part of the shell; examples of these are | |
131 | .B eval | |
132 | and | |
133 | .B export . | |
134 | Other utilities appear in the sections of POSIX.2 not | |
135 | devoted to the shell which are commonly (and in some | |
136 | cases must be) implemented as builtin commands, such as | |
137 | .B read | |
138 | and | |
139 | .B test . | |
140 | POSIX.2 also specifies aspects of the shell's | |
141 | interactive behavior as part of | |
142 | the UPE, including job control and command line editing. | |
143 | Interestingly enough, only \fIvi\fP-style line editing commands | |
144 | have been standardized; \fIemacs\fP editing commands were left | |
145 | out due to objections. | |
146 | .PP | |
147 | While POSIX.2 includes much of what the shell has traditionally | |
148 | provided, some important things have been omitted as being | |
149 | \*Qbeyond its scope.\*U There is, for instance, no mention of | |
150 | a difference between a | |
151 | .I login | |
152 | shell and any other interactive shell (since POSIX.2 does not | |
153 | specify a login program). No fixed startup files are defined, | |
154 | either \- the standard does not mention | |
155 | .I .profile . | |
156 | .NH 1 | |
157 | Basic Bash features | |
158 | .PP | |
159 | Since the Bourne shell | |
160 | provides Bash with most of its philosophical underpinnings, | |
161 | Bash inherits most of its features and functionality from sh. | |
162 | Bash implements all of the traditional sh flow | |
163 | control constructs (\fIfor\fP, \fIif\fP, \fIwhile\fP, etc.). | |
164 | All of the Bourne shell builtins, including those not specified in | |
165 | the POSIX.2 standard, appear in Bash. Shell \fIfunctions\fP, | |
166 | introduced in the SVR2 version of the Bourne shell, | |
167 | are similar to shell scripts, but are defined using a special | |
168 | syntax and are executed in the same process as the calling shell. | |
169 | Bash has shell functions | |
170 | which behave in a fashion upward-compatible with sh functions. | |
171 | There are certain shell | |
172 | variables that Bash interprets in the same way as sh, such as | |
173 | .B PS1 , | |
174 | .B IFS , | |
175 | and | |
176 | .B PATH . | |
177 | Bash implements essentially the same grammar, parameter and | |
178 | variable expansion semantics, redirection, and quoting as the | |
179 | Bourne shell. Where differences appear between the POSIX.2 | |
180 | standard and traditional sh behavior, Bash follows POSIX. | |
181 | .PP | |
ac50fbac | 182 | The Korn Shell (\fBksh\fP) is a descendant of the Bourne shell written |
726f6388 JA |
183 | at AT&T Bell Laboratories by David Korn\(dg. It provides a number of |
184 | useful features that POSIX and Bash have adopted. Many of the | |
185 | interactive facilities in POSIX.2 have their roots in the ksh: | |
186 | for example, the POSIX and ksh job control facilities are nearly | |
187 | identical. Bash includes features from the Korn Shell for both | |
188 | interactive use and shell programming. For programming, Bash provides | |
189 | variables such as | |
190 | .B RANDOM | |
191 | and | |
192 | .B REPLY , | |
193 | the | |
194 | .B typeset | |
195 | builtin, | |
196 | the ability to remove substrings from variables based on patterns, | |
197 | and shell arithmetic. | |
198 | .FS | |
199 | \(dgMorris Bolsky and David Korn, \fIThe KornShell Command and | |
200 | Programming Language\fP, Prentice Hall, 1989. | |
201 | .FE | |
202 | .B RANDOM | |
203 | expands to a random number each time it is referenced; assigning a | |
204 | value to | |
205 | .B RANDOM | |
206 | seeds the random number generator. | |
207 | .B REPLY | |
208 | is the default variable used by the | |
209 | .B read | |
210 | builtin when no variable names are supplied as arguments. | |
211 | The | |
212 | .B typeset | |
213 | builtin is used to define variables and give them attributes | |
214 | such as \fBreadonly\fP. | |
215 | Bash arithmetic allows the evaluation of an expression and the | |
216 | substitution of the result. Shell variables may be used as operands, | |
217 | and the result of an expression may be assigned to a variable. | |
218 | Nearly all of the operators from the C language are available, | |
219 | with the same precedence rules: | |
220 | .SE | |
221 | $ echo $((3 + 5 * 32)) | |
222 | 163 | |
223 | .EE | |
224 | .LP | |
225 | For interactive use, Bash implements ksh-style aliases and builtins | |
226 | such as | |
227 | .B fc | |
228 | (discussed below) and | |
229 | .B jobs . | |
230 | Bash aliases allow a string to be substituted for a command name. | |
231 | They can be used to create a mnemonic for a \s-1UNIX\s+1 command | |
232 | name (\f(CRalias del=rm\fP), to expand a single word to a complex command | |
233 | (\f(CRalias news='xterm -g 80x45 -title trn -e trn -e -S1 -N &'\fP), or to | |
234 | ensure that a command is invoked with a basic set of options | |
235 | (\f(CRalias ls="/bin/ls -F"\fP). | |
236 | .PP | |
237 | The C shell (\fBcsh\fP)\(dg, originally written by Bill Joy while at | |
238 | Berkeley, is widely used and quite popular for its interactive | |
239 | facilities. Bash includes a csh-compatible history expansion | |
240 | mechanism (\*Q! history\*U), brace expansion, access to a stack | |
241 | of directories via the | |
242 | .B pushd , | |
243 | .B popd , | |
244 | and | |
245 | .B dirs | |
246 | builtins, and tilde expansion, to generate users' home directories. | |
247 | Tilde expansion has also been adopted by both the Korn Shell and | |
248 | POSIX.2. | |
249 | .FS | |
250 | \(dgBill Joy, An Introduction to the C Shell, \fIUNIX User's Supplementary | |
251 | Documents\fP, University of California at Berkeley, 1986. | |
252 | .FE | |
253 | .PP | |
254 | There were certain areas in which POSIX.2 felt standardization | |
255 | was necessary, but no existing implementation provided the proper | |
256 | behavior. The working group invented and standardized functionality | |
257 | in these areas, which Bash implements. The | |
258 | .B command | |
259 | builtin was invented so that shell functions could be written to | |
260 | replace builtins; it makes the capabilities of the builtin | |
261 | available to the function. The reserved word \*Q!\*U was added | |
262 | to negate the return value of a command or pipeline; it was nearly | |
263 | impossible to express \*Qif not x\*U cleanly using the sh language. | |
264 | There exist multiple incompatible implementations of the | |
265 | .B test | |
266 | builtin, which tests files for type and other attributes and performs | |
267 | arithmetic and string comparisons. | |
268 | POSIX considered none of these correct, so the standard | |
269 | behavior was specified in terms of the number of arguments to the | |
270 | command. POSIX.2 dictates exactly what will happen when four or | |
271 | fewer arguments are given to | |
272 | .B test , | |
273 | and leaves the behavior undefined when more arguments are supplied. | |
274 | Bash uses the POSIX.2 algorithm, which was conceived by David Korn. | |
275 | .NH 2 | |
276 | Features not in the Bourne Shell | |
277 | .PP | |
278 | There are a number of minor differences between Bash and the | |
279 | version of sh present on most other versions of \s-1UNIX\s+1. The majority | |
280 | of these are due to the POSIX standard, but some are the result of | |
281 | Bash adopting features from other shells. For instance, Bash | |
282 | includes the new \*Q!\*U reserved word, the | |
283 | .B command | |
284 | builtin, the ability of the | |
285 | .B read | |
286 | builtin to correctly return a line ending with a backslash, symbolic | |
287 | arguments to the | |
288 | .B umask | |
289 | builtin, variable substring removal, a way to get the length of a variable, | |
290 | and the new algorithm for the | |
291 | .B test | |
292 | builtin from the POSIX.2 standard, none of which appear in sh. | |
293 | .PP | |
294 | Bash also implements the \*Q$(...)\*U command substitution syntax, | |
295 | which supersedes the sh `...` construct. | |
296 | The \*Q$(...)\*U construct expands to the output of the command | |
297 | contained within the | |
298 | parentheses, with trailing newlines removed. The sh syntax is | |
299 | accepted for backwards compatibility, but the \*Q$(...)\*U form | |
300 | is preferred because its quoting rules are much simpler and it | |
301 | is easier to nest. | |
302 | .PP | |
303 | The Bourne shell does not provide such features as brace expansion, | |
304 | the ability | |
305 | to define a variable and a function with the same name, local variables | |
306 | in shell functions, the ability to enable and disable individual | |
307 | builtins or write a function to replace a builtin, or a means to | |
308 | export a shell function to a child process. | |
309 | .PP | |
310 | Bash has closed | |
311 | a long-standing shell security hole by not using the | |
312 | .B $IFS | |
313 | variable to split each word read by the shell, but splitting only | |
314 | the results of expansion (ksh and the 4.4 BSD sh have fixed this | |
315 | as well). Useful behavior such as a means to abort | |
316 | execution of a script read with the \*Q.\*U command using the | |
317 | \fBreturn\fP builtin or automatically | |
318 | exporting variables in the shell's environment to children is also | |
319 | not present in the Bourne shell. Bash provides a much more powerful | |
320 | environment for both interactive use and programming. | |
321 | .NH 1 | |
322 | Bash-specific Features | |
323 | .PP | |
324 | This section details a few of the features which make Bash unique. | |
325 | Most of them provide improved interactive use, but a few programming | |
326 | improvements are present as well. Full descriptions of these | |
327 | features can be found in the Bash documentation. | |
328 | .NH 2 | |
329 | Startup Files | |
330 | .PP | |
331 | Bash executes startup files differently than other shells. The Bash | |
332 | behavior is a compromise between the csh principle of startup files | |
333 | with fixed names executed for each shell and the sh | |
334 | \*Qminimalist\*U behavior. An interactive instance of Bash started | |
335 | as a login shell reads and executes | |
336 | .I ~/.bash_profile | |
337 | (the file .bash_profile in the user's home directory), if it exists. | |
338 | An interactive non-login shell reads and executes | |
339 | .I ~/.bashrc . | |
340 | A non-interactive shell (one begun to execute a shell script, for | |
341 | example) reads no fixed startup file, but uses the value of the variable | |
342 | .B $ENV , | |
343 | if set, as the name of a startup file. The ksh practice of reading | |
344 | .B $ENV | |
345 | for every shell, with the accompanying difficulty of defining the | |
346 | proper variables and functions for interactive and non-interactive | |
347 | shells or having the file read only for interactive shells, was | |
348 | considered too complex. Ease of use won out here. Interestingly, | |
349 | the next release of ksh will change to reading | |
350 | .B $ENV | |
351 | only for interactive shells. | |
352 | .NH 2 | |
353 | New Builtin Commands | |
354 | .PP | |
355 | There are a few builtins which are new or have been extended in Bash. | |
356 | The | |
357 | .B enable | |
358 | builtin allows builtin commands to be turned on and off arbitrarily. | |
359 | To use the version of | |
360 | .I echo | |
361 | found in a user's search path rather than the Bash builtin, | |
362 | \f(CRenable -n echo\fP suffices. The | |
363 | .B help | |
364 | builtin provides | |
365 | quick synopses of the shell facilities without requiring | |
366 | access to a manual page. | |
367 | .B Builtin | |
368 | is similar to | |
369 | .B command | |
370 | in that it bypasses shell functions and directly executes builtin | |
371 | commands. Access to a csh-style stack of directories is provided | |
372 | via the | |
373 | .B pushd , | |
374 | .B popd , | |
375 | and | |
376 | .B dirs | |
377 | builtins. | |
378 | .B Pushd | |
379 | and | |
380 | .B popd | |
381 | insert and remove directories from the stack, respectively, and | |
382 | .B dirs | |
383 | lists the stack contents. On systems that allow fine-grained control | |
384 | of resources, the | |
385 | .B ulimit | |
386 | builtin can be used to tune these settings. | |
387 | .B Ulimit | |
388 | allows a user to control, | |
389 | among other things, whether core dumps are to be generated, | |
390 | how much memory the shell or a child process is allowed to allocate, | |
391 | and how large a file created by a child process can grow. The | |
392 | .B suspend | |
393 | command will stop the shell process when job control is active; most | |
394 | other shells do not allow themselves to be stopped like that. | |
395 | .B Type, | |
396 | the Bash answer to | |
397 | .B which | |
398 | and | |
399 | .B whence, | |
400 | shows what will happen when a word is typed as a command: | |
401 | .SE | |
402 | $ type export | |
403 | export is a shell builtin | |
404 | $ type -t export | |
405 | builtin | |
406 | $ type bash | |
407 | bash is /bin/bash | |
408 | $ type cd | |
409 | cd is a function | |
410 | cd () | |
411 | { | |
412 | builtin cd ${1+"$@"} && xtitle $HOST: $PWD | |
413 | } | |
414 | .EE | |
415 | .LP | |
416 | Various | |
417 | modes tell what a command word is (reserved word, alias, function, builtin, | |
418 | or file) or which version of a command will be executed based on | |
419 | a user's search path. Some of this functionality has been adopted | |
420 | by POSIX.2 and folded into the | |
421 | .B command | |
422 | utility. | |
423 | .NH 2 | |
424 | Editing and Completion | |
425 | .PP | |
426 | One area in which Bash shines is command line editing. Bash uses the | |
427 | .I readline | |
428 | library to read and edit lines when interactive. Readline is a | |
429 | powerful and flexible input facility that a user can configure to | |
430 | individual tastes. It allows lines to be edited using either emacs | |
431 | or vi commands, where those commands are appropriate. The full | |
432 | capability of emacs is not present \- there is no way to execute | |
433 | a named command with M-x, for instance \- but the existing commands | |
434 | are more than adequate. The vi mode is compliant with | |
435 | the command line editing standardized by POSIX.2. | |
436 | .PP | |
437 | Readline is fully customizable. In addition to the basic commands | |
438 | and key bindings, the library allows users to define additional | |
439 | key bindings using a startup file. The | |
440 | .I inputrc | |
441 | file, which defaults to the file | |
442 | .I ~/.inputrc , | |
443 | is read each time readline initializes, permitting users to | |
444 | maintain a consistent interface across a set of programs. Readline | |
445 | includes an extensible interface, so each program using the | |
446 | library can add its own bindable commands and program-specific | |
447 | key bindings. Bash uses this facility to add bindings | |
448 | that perform history expansion or shell word expansions on the current | |
449 | input line. | |
450 | .PP | |
451 | Readline interprets a number of | |
452 | variables which further tune its behavior. Variables | |
453 | exist to control whether or not eight-bit characters are directly | |
454 | read as input or converted to meta-prefixed key sequences (a | |
455 | meta-prefixed key sequence consists of the character with the | |
456 | eighth bit zeroed, preceded by the | |
457 | .I meta-prefix | |
458 | character, usually escape, which selects an alternate keymap), to | |
459 | decide whether to output characters with the eighth bit set | |
460 | directly or as a meta-prefixed key sequence, whether or not to | |
461 | wrap to a new screen line when a line being edited is longer than | |
462 | the screen width, the keymap to which subsequent key bindings should | |
463 | apply, or even what happens when readline wants to | |
464 | ring the terminal's bell. All of these variables can be set in | |
465 | the inputrc file. | |
466 | .PP | |
467 | The startup file understands a set of C | |
468 | preprocessor-like conditional constructs which allow variables or | |
469 | key bindings to be assigned based on the application using readline, | |
470 | the terminal currently being used, or the editing mode. Users can | |
471 | add program-specific bindings to make their lives easier: I have | |
472 | bindings that let me edit the value of | |
473 | .B $PATH | |
474 | and double-quote the current or previous word: | |
475 | .SE | |
476 | # Macros that are convenient for shell interaction | |
477 | $if Bash | |
478 | # edit the path | |
479 | "\eC-xp": "PATH=${PATH}\ee\eC-e\eC-a\eef\eC-f" | |
480 | # prepare to type a quoted word -- insert open and close double | |
481 | # quotes and move to just after the open quote | |
482 | "\eC-x\e"": "\e"\e"\eC-b" | |
483 | # Quote the current or previous word | |
484 | "\eC-xq": "\eeb\e"\eef\e"" | |
485 | $endif | |
486 | .EE | |
487 | .LP | |
488 | There is a readline | |
489 | command to re-read the file, so users can edit the file, change | |
490 | some bindings, and begin to use them almost immediately. | |
491 | .PP | |
492 | Bash implements the | |
493 | .B bind | |
ac50fbac | 494 | builtin for more dynamic control of readline than the startup file |
726f6388 JA |
495 | permits. |
496 | .B Bind | |
497 | is used in several ways. In | |
498 | .I list | |
499 | mode, it can display the current key bindings, list all the | |
500 | readline editing directives available for binding, list which keys | |
501 | invoke a given directive, or output the current set of key | |
502 | bindings in a format that can be incorporated directly into an inputrc | |
503 | file. In | |
504 | .I batch | |
505 | mode, it reads a series of key bindings directly from a file and | |
506 | passes them to readline. In its most common usage, | |
507 | .B bind | |
508 | takes a single string and passes it directly to readline, which | |
509 | interprets the line as if it had just been read from the inputrc file. | |
510 | Both key bindings and variable assignments may appear in the | |
511 | string given to | |
512 | .B bind . | |
513 | .PP | |
514 | The readline library also provides an interface for \fIword completion\fP. | |
515 | When the | |
516 | .I completion | |
517 | character (usually TAB) is typed, readline looks at the word currently | |
518 | being entered and computes the set of filenames of which the current | |
519 | word is a valid prefix. | |
520 | If there is only one possible completion, the | |
521 | rest of the characters are inserted directly, otherwise the | |
522 | common prefix of the set of filenames is added to the current word. | |
523 | A second TAB character entered immediately after a non-unique | |
524 | completion causes readline to list the possible completions; there is | |
525 | an option to have the list displayed immediately. | |
526 | Readline provides hooks so that applications can provide specific types | |
527 | of completion before the default filename completion is attempted. | |
528 | This is quite flexible, though it is not completely user-programmable. | |
529 | Bash, for example, can complete filenames, command names (including aliases, | |
530 | builtins, shell reserved words, shell functions, and executables found | |
531 | in the file system), shell variables, usernames, and hostnames. It | |
532 | uses a set of heuristics that, while not perfect, is generally quite | |
533 | good at determining what type of completion to attempt. | |
534 | .NH 2 | |
535 | History | |
536 | .PP | |
537 | Access to the list of commands previously entered (the \fIcommand history\fP) | |
538 | is provided jointly by Bash and the readline library. Bash provides | |
539 | variables (\fB$HISTFILE\fP, \fB$HISTSIZE\fP, and \fB$HISTCONTROL\fP) | |
540 | and the | |
541 | .B history | |
542 | and | |
543 | .B fc | |
544 | builtins to manipulate the history list. | |
545 | The value of | |
546 | .B $HISTFILE | |
ac50fbac | 547 | specifies the file where Bash writes the command history on exit and |
726f6388 JA |
548 | reads it on startup. |
549 | .B $HISTSIZE | |
550 | is used to limit the number of commands saved in the history. | |
551 | .B $HISTCONTROL | |
552 | provides a crude form of control over which commands are saved on | |
553 | the history list: a value of | |
554 | .I ignorespace | |
555 | means to not save commands which begin with a space; a value of | |
556 | .I ignoredups | |
557 | means to not save commands identical to the last command saved. | |
558 | \fB$HISTCONTROL\fP was named \fB$history_control\fP in earlier | |
559 | versions of Bash; the old name is still accepted for backwards | |
560 | compatibility. The | |
561 | .B history | |
562 | command can read or write files containing the history list | |
563 | and display the current list contents. The | |
564 | .B fc | |
565 | builtin, adopted from POSIX.2 and the Korn Shell, allows display | |
566 | and re-execution, with optional editing, | |
567 | of commands from the history list. The readline | |
568 | library offers a set of commands to search the history list for | |
569 | a portion of the current input line or a string typed by the user. | |
570 | Finally, the | |
571 | .I history | |
572 | library, generally incorporated directly into the readline library, | |
573 | implements a facility for history recall, expansion, and re-execution | |
574 | of previous commands very similar to csh | |
575 | (\*Qbang history\*U, so called because the exclamation point | |
576 | introduces a history substitution): | |
577 | .SE | |
578 | $ echo a b c d e | |
579 | a b c d e | |
580 | $ !! f g h i | |
581 | echo a b c d e f g h i | |
582 | a b c d e f g h i | |
583 | $ !-2 | |
584 | echo a b c d e | |
585 | a b c d e | |
586 | $ echo !-2:1-4 | |
587 | echo a b c d | |
588 | a b c d | |
589 | .EE | |
590 | .LP | |
591 | The command history is only | |
592 | saved when the shell is interactive, so it is not available for use | |
593 | by shell scripts. | |
594 | .NH 2 | |
595 | New Shell Variables | |
596 | .PP | |
597 | There are a number of convenience variables that Bash interprets | |
598 | to make life easier. These include | |
599 | .B FIGNORE , | |
600 | which is a set of filename suffixes identifying files to exclude when | |
601 | completing filenames; | |
602 | .B HOSTTYPE , | |
603 | which is automatically set to a string describing the type of | |
604 | hardware on which Bash is currently executing; | |
605 | .B command_oriented_history , | |
606 | which directs Bash to save all lines of a multiple-line | |
607 | command such as a \fIwhile\fP or \fIfor\fP loop in a single | |
608 | history entry, allowing easy re-editing; and | |
609 | .B IGNOREEOF , | |
610 | whose value indicates the number of consecutive EOF characters that | |
611 | an interactive shell will read before exiting \- an easy way to keep | |
612 | yourself from being logged out accidentally. The | |
613 | .B auto_resume | |
614 | variable alters the way the shell treats simple command names: | |
615 | if job control is active, and this variable is set, single-word | |
616 | simple commands without redirections cause the shell to first | |
617 | look for and restart a suspended job with that name before | |
618 | starting a new process. | |
619 | .NH 2 | |
620 | Brace Expansion | |
621 | .PP | |
622 | Since sh offers no convenient way to generate arbitrary strings that | |
623 | share a common prefix or suffix (filename expansion requires that | |
624 | the filenames exist), Bash implements \fIbrace expansion\fP, a | |
625 | capability picked up from csh. | |
626 | Brace expansion is similar to filename expansion, but the strings | |
627 | generated need not correspond to existing files. A brace expression | |
628 | consists of an optional | |
629 | .I preamble , | |
630 | followed by a pair of braces enclosing a series of comma-separated | |
631 | strings, and an optional | |
632 | .I postamble . | |
633 | The preamble is prepended to each string within the braces, and the | |
634 | postamble is then appended to each resulting string: | |
635 | .SE | |
636 | $ echo a{d,c,b}e | |
637 | ade ace abe | |
638 | .EE | |
639 | .LP | |
640 | As this example demonstrates, the results of brace expansion are not | |
641 | sorted, as they are by filename expansion. | |
642 | .NH 2 | |
643 | Process Substitution | |
644 | .PP | |
645 | On systems that can support it, Bash provides a facility known as | |
646 | \fIprocess substitution\fP. Process substitution is similar to command | |
647 | substitution in that its specification includes a command to execute, | |
648 | but the shell does not collect the command's output and insert it into | |
649 | the command line. Rather, Bash opens a pipe to the command, which | |
650 | is run in the background. The shell uses named pipes (FIFOs) or the | |
651 | .I /dev/fd | |
652 | method of naming open files to expand the process | |
653 | substitution to a filename which connects to the pipe when opened. | |
654 | This filename becomes the result of the expansion. Process substitution | |
655 | can be used to compare the outputs of two different versions of an | |
656 | application as part of a regression test: | |
657 | .SE | |
658 | $ cmp <(old_prog) <(new_prog) | |
659 | .EE | |
660 | .NH 2 | |
661 | Prompt Customization | |
662 | .PP | |
663 | One of the more popular interactive features that Bash provides is | |
664 | the ability to customize the prompt. Both | |
665 | .B $PS1 | |
666 | and | |
667 | .B $PS2, | |
668 | the primary and secondary prompts, are expanded before being | |
669 | displayed. Parameter and variable expansion is performed when | |
670 | the prompt string is expanded, so any shell variable can be | |
671 | put into the prompt (e.g., | |
672 | .B $SHLVL , | |
673 | which indicates how deeply the current shell is nested). | |
674 | Bash specially interprets characters in the prompt string | |
675 | preceded by a backslash. Some of these backslash escapes are | |
676 | replaced with | |
677 | the current time, the date, the current working directory, | |
678 | the username, and the command number or history number of the command | |
679 | being entered. There is even a backslash escape to cause the shell | |
680 | to change its prompt when running as root after an \fIsu\fP. | |
681 | Before printing each primary prompt, Bash expands the variable | |
682 | .B $PROMPT_COMMAND | |
683 | and, if it has a value, executes the expanded value as a command, | |
684 | allowing additional prompt customization. For example, this assignment | |
685 | causes the current user, the current host, the time, the last | |
686 | component of the current working directory, the level of shell | |
687 | nesting, and the history number of the current command to be embedded | |
688 | into the primary prompt: | |
689 | .SE | |
690 | $ PS1='\eu@\eh [\et] \eW($SHLVL:\e!)\e$ ' | |
691 | chet@odin [21:03:44] documentation(2:636)$ cd .. | |
692 | chet@odin [21:03:54] src(2:637)$ | |
693 | .EE | |
694 | .LP | |
695 | The string being assigned is surrounded by single quotes so that if | |
696 | it is exported, the value of | |
697 | .B $SHLVL | |
698 | will be updated by a child shell: | |
699 | .SE | |
700 | chet@odin [21:17:35] src(2:638)$ export PS1 | |
701 | chet@odin [21:17:40] src(2:639)$ bash | |
702 | chet@odin [21:17:46] src(3:696)$ | |
703 | .EE | |
704 | .LP | |
705 | The \fP\e$\fP escape is displayed | |
706 | as \*Q\fB$\fP\*U when running as a normal user, but as \*Q\fB#\fP\*U when | |
707 | running as root. | |
708 | .NH 2 | |
709 | File System Views | |
710 | .PP | |
711 | Since Berkeley introduced symbolic links in 4.2 BSD, one of their most | |
712 | annoying properties has been the \*Qwarping\*U to a completely | |
713 | different area of the file system when using | |
714 | .B cd , | |
715 | and the resultant non-intuitive behavior of \*Q\fBcd ..\fP\*U. | |
716 | The \s-1UNIX\s+1 kernel treats symbolic links | |
717 | .I physically . | |
718 | When the kernel is translating a pathname | |
719 | in which one component is a symbolic link, it replaces all or part | |
720 | of the pathname while processing the link. If the contents of the symbolic | |
721 | link begin with a slash, the kernel replaces the | |
722 | pathname entirely; if not, the link contents replace | |
723 | the current component. In either case, the symbolic link | |
724 | is visible. If the link value is an absolute pathname, | |
725 | the user finds himself in a completely different part of the file | |
726 | system. | |
727 | .PP | |
728 | Bash provides a | |
729 | .I logical | |
730 | view of the file system. In this default mode, command and filename | |
731 | completion and builtin commands such as | |
732 | .B cd | |
733 | and | |
734 | .B pushd | |
735 | which change the current working directory transparently follow | |
736 | symbolic links as if they were directories. | |
737 | The | |
738 | .B $PWD | |
739 | variable, which holds the shell's idea of the current working directory, | |
740 | depends on the path used to reach the directory rather than its | |
741 | physical location in the local file system hierarchy. For example: | |
742 | .SE | |
743 | $ cd /usr/local/bin | |
744 | $ echo $PWD | |
745 | /usr/local/bin | |
746 | $ pwd | |
747 | /usr/local/bin | |
748 | $ /bin/pwd | |
749 | /net/share/sun4/local/bin | |
750 | $ cd .. | |
751 | $ pwd | |
752 | /usr/local | |
753 | $ /bin/pwd | |
754 | /net/share/sun4/local | |
755 | $ cd .. | |
756 | $ pwd | |
757 | /usr | |
758 | $ /bin/pwd | |
759 | /usr | |
760 | .EE | |
761 | .LP | |
762 | One problem with this, of | |
763 | course, arises when programs that do not understand the shell's logical | |
764 | notion of the file system interpret \*Q..\*U differently. This generally | |
765 | happens when Bash completes filenames containing \*Q..\*U according to a | |
766 | logical hierarchy which does not correspond to their physical location. | |
767 | For users who find this troublesome, a corresponding | |
768 | .I physical | |
769 | view of the file system is available: | |
770 | .SE | |
771 | $ cd /usr/local/bin | |
772 | $ pwd | |
773 | /usr/local/bin | |
774 | $ set -o physical | |
775 | $ pwd | |
776 | /net/share/sun4/local/bin | |
777 | .EE | |
778 | .NH 2 | |
779 | Internationalization | |
780 | .PP | |
781 | One of the most significant improvements in version 1.13 of Bash was the | |
782 | change to \*Qeight-bit cleanliness\*U. Previous versions used the | |
783 | eighth bit of characters to mark whether or not they were | |
784 | quoted when performing word expansions. While this did not affect | |
785 | the majority of users, most of whom used only seven-bit ASCII characters, | |
786 | some found it confining. Beginning with version 1.13, Bash | |
787 | implemented a different quoting mechanism that did not alter the | |
788 | eighth bit of characters. This allowed Bash | |
789 | to manipulate files with \*Qodd\*U characters in their names, but | |
790 | did nothing to help users enter those names, so | |
791 | version 1.13 introduced changes to readline that | |
792 | made it eight-bit clean as well. Options exist that force readline to | |
793 | attach no special significance to characters with the eighth bit set | |
794 | (the default behavior is to convert these characters to meta-prefixed | |
795 | key sequences) and to output these characters without conversion to | |
796 | meta-prefixed sequences. These changes, along with the expansion of | |
797 | keymaps to a full eight bits, enable readline to work with most of the | |
798 | ISO-8859 family of character sets, used by many European countries. | |
799 | .NH 2 | |
800 | POSIX Mode | |
801 | .PP | |
802 | Although Bash is intended to be POSIX.2 conformant, there are areas in | |
803 | which the default behavior is not compatible with the standard. For | |
804 | users who wish to operate in a strict POSIX.2 environment, Bash | |
805 | implements a \fIPOSIX mode\fP. When this mode is active, Bash modifies | |
806 | its default operation where it differs from POSIX.2 to match the | |
807 | standard. POSIX mode is entered when Bash is started with the | |
808 | .B -posix | |
809 | option. This feature is also available as an option to the | |
810 | \fBset\fP builtin, \fBset -o posix\fP. | |
811 | For compatibility with other GNU software that attempts to be POSIX.2 | |
812 | compliant, Bash also enters POSIX mode if the variable | |
813 | .B $POSIXLY_CORRECT | |
814 | is set when Bash is started or assigned a value during execution. | |
815 | .B $POSIX_PEDANTIC | |
816 | is accepted as well, to be compatible with some older GNU utilities. | |
817 | When Bash is started in POSIX mode, for example, it sources the | |
818 | file named by the value of | |
819 | .B $ENV | |
820 | rather than the \*Qnormal\*U startup files, and does not allow | |
821 | reserved words to be aliased. | |
822 | .NH 1 | |
823 | New Features and Future Plans | |
824 | .PP | |
825 | There are several features introduced in the current | |
826 | version of Bash, version 1.14, and a number under consideration | |
827 | for future releases. This section will briefly detail the new | |
828 | features in version 1.14 and describe several features | |
829 | that may appear in later versions. | |
830 | .NH 2 | |
831 | New Features in Bash-1.14 | |
832 | .PP | |
833 | The new features available in Bash-1.14 answer several of | |
834 | the most common requests for enhancements. Most notably, there | |
835 | is a mechanism | |
836 | for including non-visible character sequences in prompts, such as | |
837 | those which cause a terminal to print characters in different | |
838 | colors or in standout mode. There was nothing preventing the use | |
839 | of these sequences in earlier | |
840 | versions, but the readline redisplay algorithm assumed each | |
841 | character occupied physical screen space and would wrap lines | |
842 | prematurely. | |
843 | .PP | |
844 | Readline has a few new | |
845 | variables, several new bindable commands, and some additional | |
846 | emacs mode default key bindings. A new history search | |
847 | mode has been implemented: in this mode, readline searches the | |
848 | history for lines beginning with the characters between the | |
849 | beginning of the current line and the cursor. The existing readline | |
850 | incremental search commands no longer match identical lines more | |
851 | than once. | |
852 | Filename completion now expands variables in directory names. | |
853 | The history expansion facilities are now nearly | |
854 | completely csh-compatible: missing modifiers have been added and | |
855 | history substitution has been extended. | |
856 | .PP | |
857 | Several of the features described earlier, such as | |
858 | .B "set -o posix" | |
859 | and | |
860 | .B $POSIX_PEDANTIC , | |
861 | are new in version 1.14. | |
862 | There is a new shell variable, | |
863 | .B OSTYPE , | |
864 | to which Bash assigns a value that identifies the | |
865 | version of \s-1UNIX\s+1 it's | |
866 | running on (great for putting architecture-specific binary directories | |
867 | into the \fB$PATH\fP). | |
868 | Two variables have been renamed: | |
869 | .B $HISTCONTROL | |
870 | replaces | |
871 | .B $history_control , | |
872 | and | |
873 | .B $HOSTFILE | |
874 | replaces | |
875 | .B $hostname_completion_file . | |
876 | In both cases, the old names are accepted for backwards | |
877 | compatibility. The ksh | |
878 | .I select | |
879 | construct, which allows the generation of simple menus, | |
880 | has been implemented. New capabilities have been added | |
881 | to existing variables: | |
882 | .B $auto_resume | |
883 | can now take values of | |
884 | .I exact | |
885 | or | |
886 | .I substring , | |
887 | and | |
888 | .B $HISTCONTROL | |
889 | understands the value | |
890 | .I ignoreboth , | |
891 | which combines the two previously acceptable values. The | |
892 | .B dirs | |
893 | builtin has acquired options to print out specific members of the | |
894 | directory stack. The | |
895 | .B $nolinks | |
896 | variable, which forces a physical view of the file system, | |
897 | has been superseded by the | |
898 | .B \-P | |
899 | option to the | |
900 | .B set | |
901 | builtin (equivalent to \fBset -o physical\fP); the variable is retained | |
902 | for backwards compatibility. The version string contained in | |
903 | .B $BASH_VERSION | |
904 | now includes an indication of the patch level as well as the | |
905 | \*Qbuild version\*U. | |
906 | Some little-used features have | |
907 | been removed: the | |
908 | .B bye | |
909 | synonym for | |
910 | .B exit | |
911 | and the | |
912 | .B $NO_PROMPT_VARS | |
913 | variable are gone. There is now an organized test suite that can be | |
914 | run as a regression test when building a new version of Bash. | |
915 | .PP | |
916 | The documentation has been thoroughly overhauled: | |
917 | there is a new manual page on the readline library and the \fIinfo\fP | |
918 | file has been updated to reflect the current version. | |
919 | As always, as many bugs as possible have been fixed, although some | |
920 | surely remain. | |
921 | .NH 2 | |
922 | Other Features | |
923 | .PP | |
924 | There are a few features that I hope to include in later Bash releases. | |
925 | Some are based on work already done in other shells. | |
926 | .PP | |
927 | In addition to simple variables, a future release of Bash will include | |
928 | one-dimensional arrays, using the ksh | |
929 | implementation of arrays as a model. Additions to the ksh syntax, | |
930 | such as \fIvarname\fP=( ... ) to assign a list of words directly to | |
931 | an array and a mechanism to allow | |
932 | the | |
933 | .B read | |
934 | builtin to read a list of values directly into an array, would be | |
935 | desirable. Given those extensions, the ksh | |
936 | .B "set \-A" | |
937 | syntax may not be worth supporting (the | |
938 | .B \-A | |
939 | option assigns a list of values to an array, but is a rather | |
940 | peculiar special case). | |
941 | .PP | |
942 | Some shells include a means of \fIprogrammable\fP word | |
943 | completion, where the user specifies on a per-command basis how the | |
944 | arguments of the command are to be treated when completion is attempted: | |
945 | as filenames, hostnames, executable files, and so on. The other | |
946 | aspects of the current Bash implementation could remain as-is; the | |
947 | existing heuristics would still be valid. Only when completing the | |
948 | arguments to a simple command would the programmable completion be | |
949 | in effect. | |
950 | .PP | |
951 | It would also be nice to give the user finer-grained | |
952 | control over which commands are saved onto the history list. One | |
953 | proposal is for a variable, tentatively named | |
954 | .B HISTIGNORE , | |
955 | which would contain a colon-separated list of commands. Lines beginning | |
956 | with these commands, after the restrictions of | |
957 | .B $HISTCONTROL | |
958 | have been applied, would not be placed onto the history list. The | |
959 | shell pattern-matching capabilities could also be available when | |
960 | specifying the contents of | |
961 | .B $HISTIGNORE . | |
962 | .PP | |
963 | One thing that newer shells such as | |
964 | .B wksh | |
965 | (also known as | |
966 | .B dtksh ) | |
967 | provide is a command to dynamically load code | |
968 | implementing additional builtin commands into a running shell. | |
969 | This new builtin would take an object file or shared library | |
970 | implementing the \*Qbody\*U of the | |
971 | builtin (\fIxxx_builtin()\fP for those familiar with Bash internals) | |
972 | and a structure containing the name of the new command, the function | |
973 | to call when the new builtin is invoked (presumably defined in the | |
974 | shared object specified as an argument), and the documentation to be | |
975 | printed by the | |
976 | .B help | |
977 | command (possibly present in the shared object as well). It would | |
978 | manage the details of extending the internal table of builtins. | |
979 | .PP | |
980 | A few other builtins would also be desirable: two are the POSIX.2 | |
981 | .B getconf | |
982 | command, which prints the values of system configuration variables | |
983 | defined by POSIX.2, and a | |
984 | .B disown | |
985 | builtin, which causes a shell running | |
986 | with job control active to \*Qforget about\*U one or more | |
987 | background jobs in its internal jobs table. Using | |
988 | .B getconf , | |
989 | for example, a user could retrieve a value for | |
990 | .B $PATH | |
991 | guaranteed to find all of the POSIX standard utilities, or | |
992 | find out how long filenames may be in the file system containing | |
993 | a specified directory. | |
994 | .PP | |
995 | There are no implementation timetables for any of these features, nor | |
996 | are there concrete plans to include them. If anyone has comments on | |
997 | these proposals, feel free to send me electronic mail. | |
998 | .NH 1 | |
999 | Reflections and Lessons Learned | |
1000 | .PP | |
1001 | The lesson that has been repeated most often during Bash | |
ccc6cda3 | 1002 | development is that there are dark corners in the Bourne shell, |
726f6388 JA |
1003 | and people use all of them. In the original description of the |
1004 | Bourne shell, quoting and the shell grammar are both poorly | |
1005 | specified and incomplete; subsequent descriptions have not helped | |
1006 | much. The grammar presented in Bourne's paper describing | |
1007 | the shell distributed with the Seventh Edition of \s-1UNIX\s+1\(dg | |
1008 | is so far off that it does not allow the command \f(CWwho|wc\fP. | |
1009 | In fact, as Tom Duff states: | |
1010 | .QP | |
1011 | Nobody really knows what the | |
1012 | Bourne shell's grammar is. Even examination of the source code is | |
1013 | little help.\(dd | |
1014 | .FS | |
1015 | \(dgS. R. Bourne, \*QUNIX Time-Sharing System: The UNIX Shell\*U, | |
1016 | \fIBell System Technical Journal\fP, 57(6), July-August, 1978, pp. 1971-1990. | |
1017 | .FE | |
1018 | .FS | |
1019 | \(ddTom Duff, \*QRc \- A Shell for Plan 9 and \s-1UNIX\s+1 systems\*U, | |
1020 | \fIProc. of the Summer 1990 EUUG Conference\fP, London, July, 1990, | |
1021 | pp. 21-33. | |
1022 | .FE | |
1023 | .LP | |
1024 | The POSIX.2 standard includes a \fIyacc\fP grammar that comes close | |
1025 | to capturing the Bourne shell's behavior, but it disallows some | |
1026 | constructs which sh accepts without complaint \- and there are | |
1027 | scripts out there that use them. It took a few versions and | |
1028 | several bug reports before Bash implemented sh-compatible quoting, | |
1029 | and there are still some \*Qlegal\*U sh constructs which Bash flags as | |
1030 | syntax errors. Complete sh compatibility is a tough nut. | |
1031 | .PP | |
1032 | The shell is bigger and slower than I would like, though the current | |
1033 | version is substantially faster than previously. The readline library | |
1034 | could stand a substantial rewrite. A hand-written parser to replace | |
1035 | the current \fIyacc\fP-generated one would probably result in a speedup, | |
1036 | and would solve one glaring problem: the shell could parse | |
1037 | commands in \*Q$(...)\*U constructs | |
1038 | as they are entered, rather than reporting errors when the construct | |
1039 | is expanded. | |
1040 | .PP | |
1041 | As always, there is some chaff to go with the wheat. | |
1042 | Areas of duplicated functionality need to be cleaned | |
1043 | up. There are several cases where Bash treats a variable specially to | |
1044 | enable functionality available another way (\fB$notify\fP vs. | |
1045 | \fBset -o notify\fP and \fB$nolinks\fP vs. \fBset -o physical\fP, for | |
1046 | instance); the special treatment of the variable name should probably | |
1047 | be removed. A few more things could stand removal; the | |
1048 | .B $allow_null_glob_expansion | |
1049 | and | |
1050 | .B $glob_dot_filenames | |
1051 | variables are of particularly questionable value. | |
1052 | The \fB$[...]\fP arithmetic evaluation syntax is redundant now that | |
1053 | the POSIX-mandated \fB$((...))\fP construct has been implemented, | |
1054 | and could be deleted. | |
1055 | It would be nice if the text output by the | |
1056 | .B help | |
1057 | builtin were external to the shell rather than compiled into it. | |
1058 | The behavior enabled by | |
1059 | .B $command_oriented_history , | |
1060 | which causes the shell to attempt to save all lines of a multi-line | |
1061 | command in a single history entry, should be made the default and | |
1062 | the variable removed. | |
1063 | .NH 1 | |
1064 | Availability | |
1065 | .PP | |
1066 | As with all other | |
1067 | GNU software, Bash is available for anonymous FTP from | |
1068 | .I prep.ai.mit.edu:/pub/gnu | |
1069 | and from other GNU software mirror sites. The current version is in | |
1070 | .I bash-1.14.1.tar.gz | |
1071 | in that directory. Use | |
1072 | .I archie | |
1073 | to find the nearest archive site. The | |
1074 | latest version is always available for FTP from | |
1075 | .I bash.CWRU.Edu:/pub/dist. | |
1076 | Bash documentation is available for FTP from | |
1077 | .I bash.CWRU.Edu:/pub/bash. | |
1078 | .PP | |
1079 | The Free Software Foundation sells tapes and CD-ROMs | |
1080 | containing Bash; send electronic mail to | |
1081 | \f(CRgnu@prep.ai.mit.edu\fP or call \f(CR+1-617-876-3296\fP | |
1082 | for more information. | |
1083 | .PP | |
1084 | Bash is also distributed with several versions of \s-1UNIX\s+1-compatible | |
1085 | systems. It is included as /bin/sh and /bin/bash on several Linux | |
1086 | distributions (more about the difference in a moment), and as contributed | |
1087 | software in BSDI's BSD/386* and FreeBSD. | |
1088 | .FS | |
1089 | *BSD/386 is a trademark of Berkeley Software Design, Inc. | |
1090 | .FE | |
1091 | .PP | |
1092 | The Linux distribution deserves special mention. There are two | |
1093 | configurations included in the standard Bash distribution: a | |
1094 | \*Qnormal\*U configuration, in which all of the standard features | |
1095 | are included, and a \*Qminimal\*U configuration, which omits job | |
1096 | control, aliases, history and command line editing, the directory | |
1097 | stack and | |
1098 | .B pushd/popd/dirs, | |
1099 | process substitution, prompt string special character decoding, and the | |
1100 | .I select | |
1101 | construct. This minimal version is designed to be a drop-in replacement | |
1102 | for the traditional \s-1UNIX\s+1 /bin/sh, and is included as the Linux | |
1103 | /bin/sh in several packagings. | |
1104 | .NH 1 | |
1105 | Conclusion | |
1106 | .PP | |
1107 | Bash is a worthy successor to sh. | |
1108 | It is sufficiently portable | |
1109 | to run on nearly every version of \s-1UNIX\s+1 from | |
1110 | 4.3 BSD to SVR4.2, and several \s-1UNIX\s+1 workalikes. | |
1111 | It is robust enough to replace sh on most of those systems, | |
1112 | and provides more functionality. It has several thousand regular users, | |
1113 | and their feedback has helped to make it as good as it is today \- a | |
1114 | testament to the benefits of free software. |