Imported from ../bash-2.02.tar.gz.
[platform/upstream/bash.git] / doc / FAQ
1 This is the Bash FAQ, version 2.11, for Bash version 2.02.
2
3 This document contains a set of frequently-asked questions concerning
4 Bash, the GNU Bourne-Again Shell.  Bash is a freely-available command
5 interpreter with advanced features for both interactive use and shell
6 programming.
7
8 Another good source of basic information about shells is the collection
9 of FAQ articles periodically posted to comp.unix.shell.
10
11 Questions and comments concerning this document should be sent to
12 chet@po.cwru.edu.
13
14 This document is available for anonymous FTP with the URL
15
16 ftp://ftp.cwru.edu/pub/bash/FAQ
17
18 ----------
19 Contents:
20
21 Section A:  The Basics
22
23 1) What is it?
24 2) What's the latest version?
25 3) Where can I get it?
26 4) On what machines will bash run?
27 5) Will bash run on operating systems other than Unix?
28 6) How can I build bash with gcc?
29 7) How can I make bash my login shell?
30 8) I just changed my login shell to bash, and now I can't FTP into my
31    machine.  Why not?
32 9) What's the `POSIX 1003.2 standard'?
33 10) What is the bash `posix mode'?
34
35 Section B:  The latest version
36
37 11) What's new in version 2.02?
38 12) Are there any user-visible incompatibilities between bash-2.02 and
39     bash-1.14.7?
40
41 Section C:  Differences from other Unix shells
42
43 13) How does bash differ from sh, the Bourne shell?
44 14) How does bash differ from the Korn shell, version ksh88?
45 15) Which new features in ksh-93 are not in bash, and which are?
46
47 Section D:  Why does bash do some things differently than other Unix shells?
48
49 16) Why does bash run a different version of `command' than
50     `which command' says it will?
51 17) Why doesn't bash treat brace expansions exactly like csh?
52 18) Why doesn't bash have csh variable modifiers?
53 19) How can I make my csh aliases work when I convert to bash?
54 20) How can I pipe standard output and standard error from one command to
55     another, like csh does with `|&'?
56 21) Now that I've converted from ksh to bash, are there equivalents to
57     ksh features like autoloaded functions and the `whence' command?
58
59 Section E:  How can I get bash to do certain things, and why does bash do
60             things the way it does?
61
62 22) Why is the bash builtin `test' slightly different from /bin/test?
63 23) Why does bash sometimes say `Broken pipe'?
64 24) How can I get bash to read and display eight-bit characters?
65 25) How do I write a function `x' to replace builtin command `x', but
66     still invoke the command from within the function?
67 26) When I have terminal escape sequences in my prompt, why does bash
68     wrap lines at the wrong column?
69 27) How can I find the value of a shell variable whose name is the value
70     of another shell variable?
71 28) If I pipe the output of a command into `read variable', why doesn't
72     the output show up in $variable when the read command finishes?
73 29) I have a bunch of shell scripts that use backslash-escaped characters
74     in arguments to `echo'.  Bash doesn't interpret these characters.  Why
75     not, and how can I make it understand them?
76 30) Why doesn't a while or for loop get suspended when I type ^Z?
77 31) How can I make the bash `time' reserved word print timing output that
78     looks like the output from my system's /usr/bin/time?
79
80 Section F:  Things to watch out for on certain Unix versions
81
82 32) Why can't I use command line editing in my `cmdtool'?
83 33) I built bash on Solaris 2.  Why do globbing expansions and filename
84     completion chop off the first few characters of each filename?
85 34) Why does bash dump core after I interrupt username completion or
86     `~user' tilde expansion on a machine running NIS?
87 35) I'm running SVR4.2.  Why is the line erased every time I type `@'?
88 36) Why does bash report syntax errors when my C News scripts use a
89     redirection before a subshell command?
90
91 Section G:  Where do I go from here?
92
93 37) How do I report bugs in bash, and where should I look for fixes and
94     advice?
95 38) What kind of bash documentation is there?
96 39) What's coming in future versions?
97 40) What's on the bash `wish list'?
98 41) When will the next release appear?
99
100 ----------
101 Section A:  The Basics
102
103 1)  What is it?
104
105 Bash is a Unix command interpreter (shell).  It is an implementation of
106 the Posix 1003.2 shell standard, and resembles the Korn and System V
107 shells.
108
109 Bash contains a number of enhancements over those shells, both
110 for interactive use and shell programming.  Features geared
111 toward interactive use include command line editing, command
112 history, job control, aliases, and prompt expansion.  Programming
113 features include additional variable expansions, shell
114 arithmetic, and a number of variables and options to control
115 shell behavior.
116
117 Bash was originally written by Brian Fox of the Free Software
118 Foundation.  The current developer and maintainer is Chet Ramey
119 of Case Western Reserve University.
120
121 2)  What's the latest version?
122
123 The latest version is 2.02, first made available on Monday, 20 April, 1998.
124
125 3)  Where can I get it?
126
127 Bash is the GNU project's shell, and so is available from the
128 master GNU archive site, prep.ai.mit.edu, and its mirrors.  The
129 latest version is also available for FTP from ftp.cwru.edu.
130 The following URLs tell how to get version 2.02:
131
132 ftp://prep.ai.mit.edu/pub/gnu/bash-2.02.tar.gz
133 ftp://ftp.cwru.edu/pub/bash/bash-2.02.tar.gz
134
135 Formatted versions of the documentation are available with the URLs:
136
137 ftp://prep.ai.mit.edu/pub/gnu/bash-doc-2.02.tar.gz
138 ftp://ftp.cwru.edu/pub/bash/bash-doc-2.02.tar.gz
139
140 4)  On what machines will bash run?
141
142 Bash has been ported to nearly every version of UNIX.  All you
143 should have to do to build it on a machine for which a port
144 exists is to type `configure' and then `make'.  The build process
145 will attempt to discover the version of UNIX you have and tailor
146 itself accordingly, using a script created by GNU autoconf.
147
148 More information appears in the file `INSTALL' in the distribution.
149
150 5) Will bash run on operating systems other than Unix?
151
152 Configuration specifics for Unix-like systems such as QNX and
153 LynxOS are included in the distribution.  Previous versions of
154 bash have been ported to Minix, but I don't believe anyone has
155 built bash-2.x on Minix yet.
156
157 Bash has been ported to versions of Windows implementing the Win32
158 programming interface.  This includes Windows 95 and Windows NT.
159 The port was done by Cygnus Solutions as part of their GNU-Win32
160 project.  For more information about the project, look at the URL
161
162 http://www.cygnus.com/misc/gnu-win32
163
164 Cygnus has ported bash-1.14.7, and their port is part of the current
165 gnu-win32 release.  Cygnus has also done a port of bash-2.01 to the
166 GNU-Win32 environment, and it should be available as part of their next
167 release.
168
169 Bash-2.02 should require no local Cygnus changes to build and run under
170 GNU-WIN32.
171
172 The Cygnus port works only on Intel machines.  There is a port of bash
173 (I don't know which version) to the alpha/NT environment available from
174
175 ftp://ftp.gnustep.org//pub/win32/bash-alpha-nt-1.01.tar.gz
176
177 Softway Systems has ported bash-2.01.1 to their OpenNT system, a
178 Unix subsystem for NT that replaces the Microsoft POSIX subsystem.
179 Check out http://www.opennt.com for more information.
180
181 D. J. Delorie has ported bash-1.14.7 to run under MS-DOS, as part of
182 the DJGPP project.  For more information on the project, see
183
184 http://www.delorie.com/djgpp/
185
186 I picked up a binary of bash-1.14.7 that is purported to work with
187 the DJGPP V2 environment from
188
189 ftp://ftp.simtel.net/pub/simtelnet/gnu/djgpp/v2gnu/bsh1147b.zip
190
191 The corresponding source is
192
193 ftp://ftp.simtel.net/pub/simtelnet/gnu/djgpp/v2gnu/bsh1147s.zip
194
195 Ports of bash-1.12 and bash-2.0 are available for OS/2 from
196
197 ftp://hobbes.nmsu.edu/pub/os2/util/shell/bash_112.zip
198 ftp://hobbes.nmsu.edu/pub/os2/util/shell/bash-2.0(253).zip
199
200 I haven't looked at either, but the second appears to be a binary-only
201 distribution.  Beware.
202
203 6) How can I build bash with gcc? 
204
205 Bash configures to use gcc by default if it is available.  Read the
206 file INSTALL in the distribution for more information.
207
208 7)  How can I make bash my login shell?
209
210 Some machines let you use `chsh' to change your login shell.  Other
211 systems use `passwd -s' or `passwd -e'.  If one of these works for
212 you, that's all you need.  Note that many systems require the full
213 pathname to a shell to appear in /etc/shells before you can make it
214 your login shell.  For this, you may need the assistance of your
215 friendly local system administrator. 
216
217 If you cannot do this, you can still use bash as your login shell, but
218 you need to perform some tricks.  The basic idea is to add a command
219 to your login shell's startup file to replace your login shell with
220 bash.
221
222 For example, if your login shell is csh or tcsh, and you have installed
223 bash in /usr/gnu/bin/bash, add the following line to ~/.login:
224
225         if ( -f /usr/gnu/bin/bash ) exec /usr/gnu/bin/bash --login
226
227 (the `--login' tells bash that it is a login shell).
228
229 It's not a good idea to put this command into ~/.cshrc, because every
230 csh you run without the `-f' option, even ones started to run csh scripts,
231 reads that file.  If you must put the command in ~/.cshrc, use something
232 like
233
234         if ( $?prompt ) exec /usr/gnu/bin/bash --login
235
236 to ensure that bash is exec'd only when the csh is interactive.
237
238 If your login shell is sh or ksh, you have to do two things.
239
240 First, create an empty file in your home directory named `.bash_profile'.
241 The existence of this file will prevent the exec'd bash from trying to
242 read ~/.profile, and re-execing itself over and over again.  ~/.bash_profile
243 is the first file bash tries to read initialization commands from when
244 it is invoked as a login shell.
245
246 Next, add a line similar to the above to ~/.profile:
247
248         [ -f /usr/gnu/bin/bash ] && exec /usr/gnu/bin/bash --login
249
250 This will cause login shells to replace themselves with bash running as
251 a login shell.  Once you have this working, you can copy your initialization
252 code from ~/.profile to ~/.bash_profile.
253
254 8) I just changed my login shell to bash, and now I can't FTP into my
255    machine.  Why not?
256
257 You must add the full pathname to bash to the file /etc/shells.  As
258 noted in the answer to the previous question, many systems require
259 this before you can make bash your login shell. 
260
261 Most versions of ftpd use this file to prohibit `special' users
262 such as `uucp' and `news' from using FTP. 
263
264 9)  What's the `POSIX 1003.2 standard'?
265
266 POSIX is a name originally coined by Richard Stallman for a
267 family of open system standards based on UNIX.  There are a
268 number of aspects of UNIX under consideration for
269 standardization, from the basic system services at the system
270 call and C library level to applications and tools to system
271 administration and management.  Each area of standardization is
272 assigned to a working group in the 1003 series. 
273
274 The POSIX Shell and Utilities standard has been developed by IEEE
275 Working Group 1003.2 (POSIX.2).  It concentrates on the command
276 interpreter interface and utility programs commonly executed from
277 the command line or by other programs.  An initial version of the
278 standard has been approved and published by the IEEE, and work is
279 currently underway to update it. 
280
281 Bash is concerned with the aspects of the shell's behavior
282 defined by POSIX.2.  The shell command language has of course
283 been standardized, including the basic flow control and program
284 execution constructs, I/O redirection and pipelining, argument
285 handling, variable expansion, and quoting. 
286
287 The `special' builtins, which must be implemented as part of the
288 shell to provide the desired functionality, are specified as
289 being part of the shell; examples of these are `eval' and
290 `export'.  Other utilities appear in the sections of POSIX.2 not
291 devoted to the shell which are commonly (and in some cases must
292 be) implemented as builtin commands, such as `read' and `test'. 
293 POSIX.2 also specifies aspects of the shell's interactive
294 behavior as part of the UPE, including job control and command
295 line editing.  Only vi-style line editing commands have been
296 standardized; emacs editing commands were left out due to
297 objections.
298
299 10)  What is the bash `posix mode'?
300
301 Although bash is an implementation of the POSIX.2 shell
302 specification, there are areas where the bash default behavior
303 differs from that spec.  The bash `posix mode' changes the bash
304 behavior in these areas so that it obeys the spec more closely. 
305
306 Posix mode is entered by starting bash with the --posix option or
307 executing `set -o posix' after bash is running.
308
309 The specific aspects of bash which change when posix mode is
310 active are listed in the file CWRU/POSIX.NOTES in the bash
311 distribution.  They are also listed in a section in the Bash
312 Reference Manual.
313
314 Section B:  The latest version
315
316 11) What's new in version 2.02?
317
318 Bash-2.02 has a number of new features.  Here's a short list:
319
320 a new version of malloc (based on the old GNU malloc code in previous
321         bash versions) that is more page-oriented, more conservative
322         with memory usage, does not `orphan' large blocks when they
323         are freed, is usable on 64-bit machines, and has allocation
324         checking turned on unconditionally
325 POSIX.2-style globbing character classes ([:alpha:], [:alnum:], etc.)
326 POSIX.2-style globbing equivalence classes
327 POSIX.2-style globbing collating symbols
328 the ksh [[...]] extended conditional command
329 the ksh egrep-style extended pattern matching operators
330 a new `printf' builtin
331 the ksh-like $(<filename) command substitution, which is equivalent to
332         $(cat filename)
333 new tilde prefixes that expand to directories from the directory stack
334 new `**' arithmetic operator to do exponentiation
335 case-insensitive globbing (filename expansion)
336 menu completion a la tcsh
337 `magic-space' history expansion function like tcsh
338 the readline inputrc `language' has a new file inclusion directive ($include)
339
340 Bash-2.01 contained only a few new features:
341
342 new `GROUPS' builtin array variable containing the user's group list
343 new bindable readline commands: history-and-alias-expand-line and
344         alias-expand-line
345
346 Bash-2.0 contained extensive changes and new features from bash-1.14.7.
347 Here's a short list:
348
349 new `time' reserved word to time pipelines, shell builtins, and
350         shell functions
351 one-dimensional arrays with a new compound assignment statement,
352         appropriate expansion constructs and modifications to some
353         of the builtins (read, declare, etc.) to use them
354 new quoting syntaxes for ANSI-C string expansion and locale-specific
355         string translation
356 new expansions to do substring extraction, pattern replacement, and
357         indirect variable expansion
358 new builtins: `disown' and `shopt'
359 new variables: HISTIGNORE, SHELLOPTS, PIPESTATUS, DIRSTACK, GLOBIGNORE,
360                MACHTYPE, BASH_VERSINFO
361 special handling of many unused or redundant variables removed
362         (e.g., $notify, $glob_dot_filenames, $no_exit_on_failed_exec)
363 dynamic loading of new builtin commands; many loadable examples provided
364 new prompt expansions: \a, \e, \n, \H, \T, \@, \v, \V
365 history and aliases available in shell scripts
366 new readline variables: enable-keypad, mark-directories, input-meta,
367         visible-stats, disable-completion, comment-begin
368 new readline commands to manipulate the mark and operate on the region
369 new readline emacs mode commands and bindings for ksh-88 compatibility
370 updated and extended builtins
371 new DEBUG trap
372 expanded (and now documented) restricted shell mode
373
374 implementation stuff:   
375 autoconf-based configuration
376 nearly all of the bugs reported since version 1.14 have been fixed
377 most builtins converted to use builtin `getopt' for consistency
378 most builtins use -p option to display output in a reusable form
379         (for consistency)
380 grammar tighter and smaller (66 reduce-reduce conflicts gone)
381 lots of code now smaller and faster
382 test suite greatly expanded
383
384 12) Are there any user-visible incompatibilities between bash-2.02 and
385     bash-1.14.7?
386
387 There are a few incompatibilities between version 1.14.7 and version 2.02.
388 They are detailed in the file COMPAT in the bash-2.02 distribution.
389
390 Section C:  Differences from other Unix shells
391
392 13) How does bash differ from sh, the Bourne shell?
393
394 This is a non-comprehensive list of features that differentiate bash
395 from the SVR4.2 shell.  The bash manual page explains these more
396 completely.
397
398 Things bash has that sh does not:
399         long invocation options
400         `!' reserved word to invert pipeline return value
401         `time' reserved word to time pipelines and shell builtins
402         the `function' reserved word
403         the select compound command and reserved word
404         new $'...' and $"..." quoting
405         the $(...) form of command substitution
406         the ${#param} parameter value length operator
407         the ${!param} indirect parameter expansion operator
408         the ${param:length[:offset]} parameter substring operator
409         the ${param/pat[/string]} parameter pattern substitution operator
410         expansions to perform substring removal (${p%[%]w}, ${p#[#]w})
411         expansion of positional parameters beyond $9 with ${num}
412         variables: BASH, BASH_VERSION, BASH_VERSINFO, UID, EUID, REPLY,
413                    TIMEFORMAT, PPID, PWD, OLDPWD, SHLVL, RANDOM, SECONDS,
414                    LINENO, HISTCMD, HOSTTYPE, OSTYPE, MACHTYPE, HOSTNAME,
415                    ENV, PS3, PS4, DIRSTACK, PIPESTATUS, HISTSIZE, HISTFILE,
416                    HISTFILESIZE, HISTCONTROL, HISTIGNORE, GLOBIGNORE,
417                    PROMPT_COMMAND, FCEDIT, FIGNORE, IGNOREEOF, INPUTRC,
418                    SHELLOPTS, OPTERR, HOSTFILE, TMOUT, histchars, auto_resume
419         DEBUG trap
420         variable arrays with new compound assignment syntax
421         redirections: <>, &>, >|
422         prompt string special char translation and variable expansion
423         auto-export of modified values of variables in initial environment
424         command search finds functions before builtins
425         bash return builtin will exit a file sourced with `.'
426         builtins: cd -/-L/-P, exec -l/-c/-a, echo -e/-E, hash -p.
427                   export -n/-f/-p/name=value, pwd -L/-P, read -e/-p/-a,
428                   readonly -a/-f/name=value, trap -l, set +o,
429                   set -b/-m/-o option/-h/-p/-B/-C/-H/-P,
430                   unset -f/-v, ulimit -m/-p/-u,
431                   type -a/-p/-t, suspend -f, kill -n,
432                   test -o optname/s1 == s2/s1 < s2/s1 > s2/-nt/-ot/-ef/-O/-G/-S
433         bash reads ~/.bashrc for interactive shells, $ENV for non-interactive
434         bash restricted shell mode is more extensive
435         bash allows functions and variables with the same name
436         brace expansion
437         tilde expansion
438         arithmetic expansion with $((...)) and `let' builtin
439         process substitution
440         aliases and alias/unalias builtins
441         local variables in functions and `local' builtin
442         readline and command-line editing
443         command history and history/fc builtins
444         csh-like history expansion
445         other new bash builtins: bind, command, builtin, declare/typeset,
446                                  dirs, enable, fc, help, history, logout,
447                                  popd, pushd, disown, shopt
448         exported functions
449         filename generation when using output redirection (command >a*)
450         variable assignments preceding commands affect only that command,
451                 even for builtins and functions
452         posix mode
453
454 Things sh has that bash does not:
455         uses variable SHACCT to do shell accounting
456         includes `stop' builtin (bash can use alias stop='kill -s STOP')
457         `newgrp' builtin
458         turns on job control if called as `jsh'
459         $TIMEOUT (like bash $TMOUT)
460         `^' is a synonym for `|'
461         new SVR4.2 sh builtins: mldmode, priv
462
463 Implementation differences:
464         redirection to/from compound commands causes sh to create a subshell
465         bash does not allow unbalanced quotes; sh silently inserts them at EOF
466         bash does not mess with signal 11
467         sh sets (euid, egid) to (uid, gid) if -p not supplied and uid < 100
468         bash splits only the results of expansions on IFS, using POSIX.2
469                 field splitting rules; sh splits all words on IFS
470         sh does not allow MAILCHECK to be unset (?)
471         sh does not allow traps on SIGALRM or SIGCHLD
472         bash allows multiple option arguments when invoked (e.g. -x -v);
473                 sh allows only a single option argument (`sh -x -v' attempts
474                 to open a file named `-v', and, on SunOS 4.1.4, dumps core.
475                 On Solaris 2, sh goes into an infinite loop.)
476         sh exits a script if any builtin fails; bash exits only if one of
477                 the POSIX.2 `special' builtins fails
478
479 14)  How does bash differ from the Korn shell, version ksh88?
480
481 Things bash has or uses that ksh88 does not:
482         long invocation options
483         `!' reserved word
484         posix mode and posix conformance
485         command hashing
486         tilde expansion for assignment statements that look like $PATH
487         process substitution with named pipes if /dev/fd is not available
488         the ${!param} indirect parameter expansion operator
489         the ${param:length[:offset]} parameter substring operator
490         the ${param/pat[/string]} parameter pattern substitution operator
491         variables: BASH, BASH_VERSION, BASH_VERSINFO, UID, EUID, SHLVL,
492                    TIMEFORMAT, HISTCMD, HOSTTYPE, OSTYPE, MACHTYPE,
493                    HISTFILESIZE, HISTIGNORE, HISTCONTROL, PROMPT_COMMAND,
494                    IGNOREEOF, FIGNORE, INPUTRC, HOSTFILE, DIRSTACK,
495                    PIPESTATUS, HOSTNAME, OPTERR, SHELLOPTS, GLOBIGNORE,
496                    histchars, auto_resume
497         prompt expansion with backslash escapes and command substitution
498         redirection: &> (stdout and stderr)
499         more extensive and extensible editing and completion
500         builtins: bind, builtin, command, declare, dirs, echo -e/-E, enable,
501                   exec -l/-c/-a, fc -s, export -n/-f/-p, hash, help, history,
502                   jobs -x/-r/-s, kill -s/-n/-l, local, logout, popd, pushd,
503                   read -e/-p/-a, readonly -a/-n/-f/-p, set -o braceexpand/
504                   -o histexpand/-o interactive-comments/-o notify/-o physical/
505                   -o posix/-o hashall/-o onecmd/-h/-B/-C/-b/-H/-P, set +o,
506                   suspend, trap -l, type, typeset -a/-F/-p, ulimit -u,
507                   umask -S, alias -p, shopt, disown
508         `!' csh-style history expansion
509
510 Things ksh88 has or uses that bash does not:
511         new version of test: [[...]]
512         tracked aliases
513         $(<file)        
514         variables: ERRNO, FPATH, COLUMNS, LINES, EDITOR, VISUAL
515         extended pattern matching with egrep-style pattern lists
516         co-processes (|&, >&p, <&p)
517         weirdly-scoped functions
518         typeset +f to list all function names without definitions
519         text of command history kept in a file, not memory
520         builtins: alias -x, cd old new, fc -e -, newgrp, print,
521                   read -p/-s/-u/var?prompt, set -A/-o gmacs/
522                   -o bgnice/-o markdirs/-o nolog/-o trackall/-o viraw/-s,
523                   typeset -H/-L/-R/-A/-ft/-fu/-fx/-l/-u/-t, whence
524
525 Implementation differences:
526         ksh runs last command of a pipeline in parent shell context
527         bash has brace expansion by default (ksh88 compile-time option)
528         bash has fixed startup file for all interactive shells; ksh reads $ENV
529         bash has exported functions
530         bash command search finds functions before builtins
531
532 15)  Which new features in ksh-93 are not in bash, and which are?
533
534 New things in ksh-93 not in bash-2.02:
535         associative arrays
536         floating point arithmetic
537         ++, --, comma arithmetic operators
538         math library functions
539         ${!name[sub]} name of subscript for associative array
540         ${!prefix*} and {!prefix@} variable name prefix expansions
541         `.' is allowed in variable names to create a hierarchical namespace
542         more extensive compound assignment syntax
543         discipline functions
544         `sleep' and `getconf' builtins (bash has loadable versions)
545         typeset -n and `nameref' variables
546         KEYBD trap
547         variables: .sh.edchar, .sh.edmode, .sh.edcol, .sh.edtext, HISTEDIT,
548                    .sh.version, .sh.name, .sh.subscript, .sh.value
549         backreferences in pattern matching
550         print -f (bash has a loadable version)
551         `fc' has been renamed to `hist'
552         read -t/-d
553         `.' can execute shell functions
554
555 New things in ksh-93 present in bash-2.02:
556         ?: arithmetic operator
557         expansions: ${!param}, ${param:offset[:len]}, ${param/pat[/str]}
558         compound array assignment
559         the `!' reserved word
560         loadable builtins -- but ksh uses `builtin' while bash uses `enable'
561         `command', `builtin', `disown' builtins
562         new $'...' and $"..." quoting
563         FIGNORE (but bash uses GLOBIGNORE), HISTCMD
564         set -o notify/-C
565         changes to kill builtin
566         read -A (bash uses read -a)
567         trap -p
568         exec -c/-a
569         `.' restores the positional parameters when it completes
570         POSIX.2 `test'
571         umask -S
572         unalias -a
573         command and arithmetic substitution performed on PS1, PS4, and ENV
574         command name completion
575         ENV processed only for interactive shells
576
577 Section D:  Why does bash do some things differently than other Unix shells?
578
579 16) Why does bash run a different version of `command' than
580     `which command' says it will?
581
582 `which' is actually a csh script that assumes you're running csh. 
583 It reads the csh startup files from your home directory and uses
584 those to determine which `command' will be invoked.  Since bash
585 doesn't use any of those startup files, there's a good chance
586 that your bash environment differs from your csh environment. 
587
588 17) Why doesn't bash treat brace expansions exactly like csh?
589
590 The only difference between bash and csh brace expansion is that
591 bash requires a brace expression to contain at least one unquoted
592 comma if it is to be expanded.  Any brace-surrounded word not
593 containing an unquoted comma is left unchanged by the brace
594 expansion code.  This affords the greatest degree of sh
595 compatibility. 
596
597 Bash, ksh, zsh, and pd-ksh all implement brace expansion this way. 
598
599 18) Why doesn't bash have csh variable modifiers?
600
601 Posix has specified a more powerful, albeit somewhat more cryptic,
602 mechanism cribbed from ksh, and bash implements it.
603
604 ${parameter%word}
605         Remove smallest suffix pattern.  The WORD is expanded to produce
606         a pattern.  It then expands to the value of PARAMETER, with the
607         smallest portion of the suffix matched by the pattern deleted.
608
609         x=file.c
610         echo ${x%.c}.o
611         -->file.o
612
613 ${parameter%%word}
614
615         Remove largest suffix pattern.  The WORD is expanded to produce
616         a pattern.  It then expands to the value of PARAMETER, with the
617         largest portion of the suffix matched by the pattern deleted.
618
619         x=posix/src/std
620         echo ${x%%/*}
621         -->posix
622
623 ${parameter#word}
624         Remove smallest prefix pattern.  The WORD is expanded to produce
625         a pattern.  It then expands to the value of PARAMETER, with the
626         smallest portion of the prefix matched by the pattern deleted.
627
628         x=$HOME/src/cmd
629         echo ${x#$HOME}
630         -->/src/cmd
631
632 ${parameter##word}
633         Remove largest prefix pattern.  The WORD is expanded to produce
634         a pattern.  It then expands to the value of PARAMETER, with the
635         largest portion of the prefix matched by the pattern deleted.
636
637         x=/one/two/three
638         echo ${x##*/}
639         -->three
640
641
642 Given
643         a=/a/b/c/d
644         b=b.xxx
645
646         csh                     bash            result
647         ---                     ----            ------
648         $a:h                    ${a%/*}            /a/b/c
649         $a:t                    ${a##*/}           d
650         $b:r                    ${b%.*}            b
651         $b:e                    ${b##*.}           xxx
652
653
654 19) How can I make my csh aliases work when I convert to bash?
655
656 Bash uses a different syntax to support aliases than csh does. 
657 The details can be found in the documentation.  We have provided
658 a shell script which does most of the work of conversion for you;
659 this script can be found in ./examples/misc/alias-conv.sh.  Here is
660 how you use it:
661   
662 Start csh in the normal way for you.  (e.g., `csh')
663   
664 Pipe the output of `alias' through `alias-conv.sh', saving the
665 results into `bash_aliases':
666   
667         alias | alias-conv.sh >bash_aliases
668   
669 Edit `bash_aliases', carefully reading through any created
670 functions.  You will need to change the names of some csh specific
671 variables to the bash equivalents.  The script converts $cwd to
672 $PWD, $term to $TERM, $home to $HOME, $user to $USER, and $prompt
673 to $PS1.  You may also have to add quotes to avoid unwanted
674 expansion.
675
676 For example, the csh alias:
677   
678         alias cd 'cd \!*; echo $cwd'
679   
680 is converted to the bash function:
681
682         cd () { command cd "$@"; echo $PWD ; }
683
684 The only thing that needs to be done is to quote $PWD:
685   
686         cd () { command cd "$@"; echo "$PWD" ; }
687   
688 Merge the edited file into your ~/.bashrc.
689
690 There is an additional, more ambitious, script in
691 examples/misc/cshtobash that attempts to convert your entire csh
692 environment to its bash equivalent.  This script can be run as
693 simply `cshtobash' to convert your normal interactive
694 environment, or as `cshtobash ~/.login' to convert your login
695 environment. 
696
697 20) How can I pipe standard output and standard error from one command to
698     another, like csh does with `|&'?
699
700 Use
701         command 2>&1 | command2
702
703 The key is to remember that piping is performed before redirection, so
704 file descriptor 1 points to the pipe when it is duplicated onto file
705 descriptor 2.
706
707 21) Now that I've converted from ksh to bash, are there equivalents to
708     ksh features like autoloaded functions and the `whence' command?
709
710 There are features in ksh-88 that do not have direct bash equivalents.
711 Most, however, can be emulated with very little trouble.
712
713 ksh-88 feature          Bash equivalent
714 --------------          ---------------
715 [[...]]                 can usually use [...]; minor differences (no
716                         pattern matching, for one)
717 compiled-in aliases     set up aliases in .bashrc; some ksh aliases are
718                         bash builtins (hash, history, type)
719 $(<file)                $(cat file)
720 extended patterns       no good substitute
721 coprocesses             named pipe pairs (one for read, one for write)
722 typeset +f              declare -F
723 cd, print, whence       function substitutes in examples/functions/kshenv
724 autoloaded functions    examples/functions/autoload is the same as typeset -fu
725 read var?prompt         read -p prompt var
726
727 Section E:  How can I get bash to do certain things, and why does bash do
728             things the way it does?
729
730 22) Why is the bash builtin `test' slightly different from /bin/test?
731
732 The specific example used here is [ ! x -o x ], which is false.
733
734 Bash's builtin `test' implements the Posix.2 spec, which can be
735 summarized as follows (the wording is due to David Korn):
736    
737 Here is the set of rules for processing test arguments.
738   
739     0 Args: False
740     1 Arg:  True iff argument is not null.
741     2 Args: If first arg is !, True iff second argument is null.
742             If first argument is unary, then true if unary test is true
743             Otherwise error.
744     3 Args: If second argument is a binary operator, do binary test of $1 $3
745             If first argument is !, negate two argument test of $2 $3
746             If first argument is `(' and third argument is `)', do the
747             one-argument test of the second argument.
748             Otherwise error.
749     4 Args: If first argument is !, negate three argument test of $2 $3 $4.
750             Otherwise unspecified
751     5 or more Args: unspecified.  (Historical shells would use their
752     current algorithm).
753    
754 The operators -a and -o are considered binary operators for the purpose
755 of the 3 Arg case.
756    
757 As you can see, the test becomes (not (x or x)), which is false.
758
759 23) Why does bash sometimes say `Broken pipe'?
760
761 If a sequence of commands appears in a pipeline, and one of the
762 reading commands finishes before the writer has finished, the
763 writer receives a SIGPIPE signal.  Many other shells special-case
764 SIGPIPE as an exit status in the pipeline and do not report it. 
765 For example, in:
766   
767       ps -aux | head
768   
769 `head' can finish before `ps' writes all of its output, and ps
770 will try to write on a pipe without a reader.  In that case, bash
771 will print `Broken pipe' to stderr when ps is killed by a
772 SIGPIPE. 
773
774 24) How can I get bash to read and display eight-bit characters?
775
776 This is a process requiring several steps.
777
778 First, you must ensure that the `physical' data path is a full eight
779 bits.  For xterms, for example, the `vt100' resources `eightBitInput'
780 and `eightBitOutput' should be set to `true'.
781
782 Once you have set up an eight-bit path, you must tell the kernel and
783 tty driver to leave the eighth bit of characters alone when processing
784 keyboard input.  Use `stty' to do this:
785
786         stty cs8 -istrip -parenb
787
788 For old BSD-style systems, you can use
789
790         stty pass8
791
792 You may also need
793
794         stty even odd
795
796 Finally, you need to tell readline that you will be inputting and
797 displaying eight-bit characters.  You use readline variables to do
798 this.  These variables can be set in your .inputrc or using the bash
799 `bind' builtin.  Here's an example using `bind':
800
801         bash$ bind 'set convert-meta off'
802         bash$ bind 'set meta-flag on'
803         bash$ bind 'set output-meta on'
804
805 The `set' commands between the single quotes may also be placed
806 in ~/.inputrc.
807
808 25) How do I write a function `x' to replace builtin command `x', but
809     still invoke the command from within the function?
810
811 This is why the `command' and `builtin' builtins exist.  The
812 `command' builtin executes the command supplied as its first
813 argument, skipping over any function defined with that name.  The
814 `builtin' builtin executes the builtin command given as its first
815 argument directly. 
816
817 For example, to write a function to replace `cd' that writes the
818 hostname and current directory to an xterm title bar, use
819 something like the following:
820
821         cd()
822         {
823                 builtin cd "$@" && xtitle "$HOST: $PWD"
824         }
825
826 This could also be written using `command' instead of `builtin';
827 the version above is marginally more efficient. 
828
829 26) When I have terminal escape sequences in my prompt, why does bash
830     wrap lines at the wrong column?
831
832 Readline, the line editing library that bash uses, does not know
833 that the terminal escape sequences do not take up space on the
834 screen.  The redisplay code assumes, unless told otherwise, that
835 each character in the prompt is a `printable' character that
836 takes up one character position on the screen. 
837
838 You can use the bash prompt expansion facility (see the PROMPTING
839 section in the manual page) to tell readline that sequences of
840 characters in the prompt strings take up no screen space. 
841
842 Use the \[ escape to begin a sequence of non-printing characters,
843 and the \] escape to signal the end of such a sequence. 
844
845 27) How can I find the value of a shell variable whose name is the value
846     of another shell variable?
847
848 Bash-2.02 supports this directly.  You can use 
849
850         ${!var}
851
852 For example, the following sequence of commands will echo `z':
853
854         var1=var2
855         var2=z
856         echo ${!var1}
857
858 For sh compatibility, use the `eval' builtin.  The important
859 thing to remember is that `eval' expands the arguments you give
860 it again, so you need to quote the parts of the arguments that
861 you want `eval' to act on. 
862
863 For example, this expression prints the value of the last positional
864 parameter:
865
866         eval echo \"\$\{$#\}\"
867
868 The expansion of the quoted portions of this expression will be
869 deferred until `eval' runs, while the `$#' will be expanded
870 before `eval' is executed.  In bash-2.02,
871
872         echo ${!#}
873
874 does the same thing.
875
876 28) If I pipe the output of a command into `read variable', why doesn't
877     the output show up in $variable when the read command finishes?
878
879 This has to do with the parent-child relationship between Unix
880 processes. 
881
882 Each element of a pipeline runs in a separate process, a child of
883 the shell running the pipeline.  A subprocess cannot affect its
884 parent's environment.  When the `read' command sets the variable
885 to the input, that variable is set only in the subshell, not the
886 parent shell.  When the subshell exits, the value of the variable
887 is lost. 
888
889 Many pipelines that end with `read variable' can be converted
890 into command substitutions, which will capture the output of
891 a specified command.  The output can then be assigned to a
892 variable:
893
894         grep ^gnu /usr/lib/news/active | wc -l | read ngroup
895
896 can be converted into
897
898         ngroup=$(grep ^gnu /usr/lib/news/active | wc -l)
899
900 This does not, unfortunately, work to split the text among
901 multiple variables, as read does when given multiple variable
902 arguments.  If you need to do this, you can either use the
903 command substitution above to read the output into a variable
904 and chop up the variable using the bash pattern removal
905 expansion operators or use some variant of the following
906 approach.
907
908 Say /usr/local/bin/ipaddr is the following shell script:
909
910 #! /bin/sh
911 host `hostname` | awk '/address/ {print $NF}'
912
913 Instead of using
914
915         /usr/local/bin/ipaddr | read A B C D
916
917 to break the local machine's IP address into separate octets, use
918
919         OIFS="$IFS"
920         IFS=.
921         set -- $(/usr/local/bin/ipaddr)
922         IFS="$OIFS"
923         A="$1" B="$2" C="$3" D="$4"
924
925 Beware, however, that this will change the shell's positional
926 parameters.  If you need them, you should save them before doing
927 this.
928
929 This is the general approach -- in most cases you will not need to
930 set $IFS to a different value.
931
932 29) I have a bunch of shell scripts that use backslash-escaped characters
933     in arguments to `echo'.  Bash doesn't interpret these characters.  Why
934     not, and how can I make it understand them?
935
936 This is the behavior of echo on most Unix System V machines.
937
938 The bash builtin `echo' is modelled after the 9th Edition
939 Research Unix version of `echo'.  It does not interpret
940 backslash-escaped characters in its argument strings by default;
941 it requires the use of the -e option to enable the
942 interpretation.  The System V echo provides no way to disable the
943 special characters; the bash echo has a -E option to disable
944 them. 
945
946 There is a configuration option that will make bash behave like
947 the System V echo and interpret things like `\t' by default.  Run
948 configure with the --enable-usg-echo-default option to turn this
949 on.  Be aware that this will cause some of the tests run when you
950 type `make tests' to fail.
951
952 30) Why doesn't a while or for loop get suspended when I type ^Z?
953
954 This is a consequence of how job control works on Unix.  The only
955 thing that can be suspended is the process group.  This is a single
956 command or pipeline of commands that the shell forks and executes.
957
958 When you run a while or for loop, the only thing that the shell forks
959 and executes are any commands in the while loop test and commands in
960 the loop bodies.  These, therefore, are the only things that can be
961 suspended when you type ^Z.
962
963 If you want to be able to stop the entire loop, you need to put it
964 within parentheses, which will force the loop into a subshell that
965 may be stopped (and subsequently restarted) as a single unit.
966
967 31) How can I make the bash `time' reserved word print timing output that
968     looks like the output from my system's /usr/bin/time?
969
970 The bash command timing code looks for a variable `TIMEFORMAT' and
971 uses its value as a format string to decide how to display the
972 timing statistics.
973
974 The value of TIMEFORMAT is a string with `%' escapes expanded in a
975 fashion similar in spirit to printf(3).  The manual page explains
976 the meanings of the escape sequences in the format string.
977
978 If TIMEFORMAT is not set, bash acts as if the following assignment had
979 been performed:
980
981         TIMEFORMAT=$'\nreal\t%3lR\nuser\t%3lU\nsys\t%3lS'
982
983 The POSIX.2 default time format (used by `time -p command') is
984
985         TIMEFORMAT=$'real %2R\nuser %2U\nsys %2S'
986
987 The BSD /usr/bin/time format can be emulated with:
988
989         TIMEFORMAT=$'\t%1R real\t%1U user\t%1S sys'
990
991 The System V /usr/bin/time format can be emulated with:
992
993         TIMEFORMAT=$'\nreal\t%1R\nuser\t%1U\nsys\t%1S'
994
995 The ksh format can be emulated with:
996
997         TIMEFORMAT=$'\nreal\t%2lR\nuser\t%2lU\nsys\t%2lS'
998
999 Section F:  Things to watch out for on certain Unix versions
1000
1001 32) Why can't I use command line editing in my `cmdtool'?
1002
1003 The problem is `cmdtool' and bash fighting over the input.  When
1004 scrolling is enabled in a cmdtool window, cmdtool puts the tty in
1005 `raw mode' to permit command-line editing using the mouse for
1006 applications that cannot do it themselves.  As a result, bash and
1007 cmdtool each try to read keyboard input immediately, with neither
1008 getting enough of it to be useful.
1009
1010 This mode also causes cmdtool to not implement many of the
1011 terminal functions and control sequences appearing in the
1012 `sun-cmd' termcap entry.  For a more complete explanation, see
1013 that file examples/suncmd.termcap in the bash distribution. 
1014
1015 `xterm' is a better choice, and gets along with bash much more
1016 smoothly.
1017
1018 If you must use cmdtool, you can use the termcap description in
1019 examples/suncmd.termcap.  Set the TERMCAP variable to the terminal
1020 description contained in that file, i.e.
1021
1022 TERMCAP='Mu|sun-cmd:am:bs:km:pt:li#34:co#80:cl=^L:ce=\E[K:cd=\E[J:rs=\E[s:'
1023
1024 Then export TERMCAP and start a new cmdtool window from that shell.
1025 The bash command-line editing should behave better in the new
1026 cmdtool.  If this works, you can put the assignment to TERMCAP
1027 in your bashrc file.
1028
1029 33) I built bash on Solaris 2.  Why do globbing expansions and filename
1030     completion chop off the first few characters of each filename?
1031
1032 This is the consequence of building bash on SunOS 5 and linking
1033 with the libraries in /usr/ucblib, but using the definitions
1034 and structures from files in /usr/include. 
1035
1036 The actual conflict is between the dirent structure in
1037 /usr/include/dirent.h and the struct returned by the version of
1038 `readdir' in libucb.a (a 4.3-BSD style `struct direct'). 
1039
1040 Make sure you've got /usr/ccs/bin ahead of /usr/ucb in your $PATH
1041 when configuring and building bash.  This will ensure that you
1042 use /usr/ccs/bin/cc or acc instead of /usr/ucb/cc and that you
1043 link with libc before libucb. 
1044
1045 If you have installed the Sun C compiler, you may also need to
1046 put /usr/ccs/bin and /opt/SUNWspro/bin into your $PATH before
1047 /usr/ucb.
1048
1049 34) Why does bash dump core after I interrupt username completion or
1050     `~user' tilde expansion on a machine running NIS?
1051
1052 This is a famous and long-standing bug in the SunOS YP (sorry, NIS)
1053 client library, which is part of libc.
1054
1055 The YP library code keeps static state -- a pointer into the data
1056 returned from the server.  When YP initializes itself (setpwent),
1057 it looks at this pointer and calls free on it if it's non-null. 
1058 So far, so good. 
1059
1060 If one of the YP functions is interrupted during getpwent (the
1061 exact function is interpretwithsave()), and returns NULL, the
1062 pointer is freed without being reset to NULL, and the function
1063 returns.  The next time getpwent is called, it sees that this
1064 pointer is non-null, calls free, and the bash free() blows up
1065 because it's being asked to free freed memory. 
1066
1067 The traditional Unix mallocs allow memory to be freed multiple
1068 times; that's probably why this has never been fixed.  You can
1069 run configure with the `--without-gnu-malloc' option to use
1070 the C library malloc and avoid the problem.
1071
1072 35) I'm running SVR4.2.  Why is the line erased every time I type `@'?
1073
1074 The `@' character is the default `line kill' character in most
1075 versions of System V, including SVR4.2.  You can change this
1076 character to whatever you want using `stty'.  For example, to
1077 change the line kill character to control-u, type
1078
1079         stty kill ^U
1080
1081 where the `^' and `U' can be two separate characters.
1082
1083 36) Why does bash report syntax errors when my C News scripts use a
1084     redirection before a subshell command?
1085
1086 The actual command in question is something like
1087
1088         < file ( command )
1089
1090 According to the grammar given in the POSIX.2 standard, this construct
1091 is, in fact, a syntax error.  Redirections may only precede `simple
1092 commands'.  A subshell construct such as the above is one of the shell's
1093 `compound commands'.  A redirection may only follow a compound command.
1094
1095 The file CWRU/sh-redir-hack in the bash-2.02 distribution is an
1096 (unofficial) patch to parse.y that will modify the grammar to
1097 support this construct.  It will not apply with `patch'; you must
1098 modify parse.y by hand.  Note that if you apply this, you must
1099 recompile with -DREDIRECTION_HACK.  This introduces a large
1100 number of reduce/reduce conflicts into the shell grammar. 
1101
1102 Section G:  Where do I go from here?
1103
1104 37) How do I report bugs in bash, and where should I look for fixes and
1105     advice?
1106
1107 Use the `bashbug' script to report bugs.  It is built and
1108 installed at the same time as bash.  It provides a standard
1109 template for reporting a problem and automatically includes
1110 information about your configuration and build environment. 
1111
1112 `bashbug' sends its reports to bug-bash@prep.ai.mit.edu, which
1113 is a large mailing list gatewayed to the usenet newsgroup gnu.bash.bug. 
1114
1115 Bug fixes, answers to questions, and announcements of new releases
1116 are all posted to gnu.bash.bug.  Discussions concerning bash features
1117 and problems also take place there.
1118
1119 To reach the bash maintainers directly, send mail to
1120 bash-maintainers@prep.ai.mit.edu.
1121
1122 38) What kind of bash documentation is there?
1123
1124 First, look in the doc directory in the bash distribution.  It should
1125 contain at least the following files:
1126
1127 bash.1          an extensive, thorough Unix-style manual page
1128 builtins.1      a manual page covering just bash builtin commands
1129 bashref.texi    a reference manual in GNU info format
1130 bash.html       an HTML version of the manual page
1131 bashref.html    an HTML version of the reference manual
1132 FAQ             this file
1133 article.ms      text of an article written for The Linux Journal
1134 readline.3      a man page describing readline
1135
1136 Postscript files created from the above source are available in
1137 the documentation distribution.
1138
1139 There is additional documentation available for anonymous FTP from host
1140 ftp.cwru.edu in the `pub/bash' directory.
1141
1142 Cameron Newham and Bill Rosenblatt have written a book on bash, published
1143 by O'Reilly and Associates.  The book is based on Bill Rosenblatt's Korn
1144 Shell book.  The title is ``Learning the Bash Shell'', and the ISBN number
1145 is 1-56592-147-X.  Look for it in fine bookstores near you.  This book
1146 covers bash-1.14, but has an appendix describing some of the new features
1147 in bash-2.0.  
1148
1149 A second edition of this book is available, just published in January, 1998.
1150 The ISBN number is 1-56592-347-2.  Look for it in the same fine bookstores
1151 or on the web.
1152
1153 39) What's coming in future versions?
1154
1155 These are features I plan to include in a future version of bash.
1156
1157 a bash debugger (a minimally-tested version is included with bash-2.02)
1158 Programmable completion a la zsh
1159
1160 40) What's on the bash `wish list' for future versions?
1161
1162 These are features that may or may not appear in a future version of bash.
1163
1164 associative arrays (not really all that hard)
1165 breaking some of the shell functionality into embeddable libraries
1166 better internationalization using GNU `gettext'
1167 an option to use external files for the long `help' text
1168 timeouts for the `read' builtin
1169 the ksh-93 ${!prefix*} and ${!prefix@} operators
1170 arithmetic ++ and -- prefix and postfix operators
1171 date-stamped command history
1172
1173 41) When will the next release appear?
1174
1175 The next version will appear sometime in 1998.  Never make
1176 predictions. 
1177
1178
1179 This document is Copyright 1995, 1996, 1998 by Chester Ramey.
1180
1181 Permission is hereby granted, without written agreement and
1182 without license or royalty fees, to use, copy, and distribute
1183 this document for any purpose, provided that the above copyright
1184 notice appears in all copies of this document and that the
1185 contents of this document remain unaltered.