]> git.ipfire.org Git - thirdparty/bash.git/blob - doc/FAQ-2.05b
initial fork from devel branch
[thirdparty/bash.git] / doc / FAQ-2.05b
1 This is the Bash FAQ, version 3.26, for Bash version 2.05b.
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 The Bash home page is http://cnswww.cns.cwru.edu/~chet/bash/bashtop.html
19
20 ----------
21 Contents:
22
23 Section A: The Basics
24
25 A1) What is it?
26 A2) What's the latest version?
27 A3) Where can I get it?
28 A4) On what machines will bash run?
29 A5) Will bash run on operating systems other than Unix?
30 A6) How can I build bash with gcc?
31 A7) How can I make bash my login shell?
32 A8) I just changed my login shell to bash, and now I can't FTP into my
33 machine. Why not?
34 A9) What's the `POSIX Shell and Utilities standard'?
35 A10) What is the bash `posix mode'?
36
37 Section B: The latest version
38
39 B1) What's new in version 2.05b?
40 B2) Are there any user-visible incompatibilities between bash-2.05b and
41 bash-1.14.7?
42
43 Section C: Differences from other Unix shells
44
45 C1) How does bash differ from sh, the Bourne shell?
46 C2) How does bash differ from the Korn shell, version ksh88?
47 C3) Which new features in ksh-93 are not in bash, and which are?
48
49 Section D: Why does bash do some things differently than other Unix shells?
50
51 D1) Why does bash run a different version of `command' than
52 `which command' says it will?
53 D2) Why doesn't bash treat brace expansions exactly like csh?
54 D3) Why doesn't bash have csh variable modifiers?
55 D4) How can I make my csh aliases work when I convert to bash?
56 D5) How can I pipe standard output and standard error from one command to
57 another, like csh does with `|&'?
58 D6) Now that I've converted from ksh to bash, are there equivalents to
59 ksh features like autoloaded functions and the `whence' command?
60
61 Section E: Why does bash do certain things the way it does?
62
63 E1) Why is the bash builtin `test' slightly different from /bin/test?
64 E2) Why does bash sometimes say `Broken pipe'?
65 E3) When I have terminal escape sequences in my prompt, why does bash
66 wrap lines at the wrong column?
67 E4) If I pipe the output of a command into `read variable', why doesn't
68 the output show up in $variable when the read command finishes?
69 E5) I have a bunch of shell scripts that use backslash-escaped characters
70 in arguments to `echo'. Bash doesn't interpret these characters. Why
71 not, and how can I make it understand them?
72 E6) Why doesn't a while or for loop get suspended when I type ^Z?
73 E7) What about empty for loops in Makefiles?
74 E8) Why does the arithmetic evaluation code complain about `08'?
75 E9) Why does the pattern matching expression [A-Z]* match files beginning
76 with every letter except `z'?
77 E10) Why does `cd //' leave $PWD as `//'?
78 E11) If I resize my xterm while another program is running, why doesn't bash
79 notice the change?
80 E12) Why don't negative offsets in substring expansion work like I expect?
81
82 Section F: Things to watch out for on certain Unix versions
83
84 F1) Why can't I use command line editing in my `cmdtool'?
85 F2) I built bash on Solaris 2. Why do globbing expansions and filename
86 completion chop off the first few characters of each filename?
87 F3) Why does bash dump core after I interrupt username completion or
88 `~user' tilde expansion on a machine running NIS?
89 F4) I'm running SVR4.2. Why is the line erased every time I type `@'?
90 F5) Why does bash report syntax errors when my C News scripts use a
91 redirection before a subshell command?
92 F6) Why can't I use vi-mode editing on Red Hat Linux 6.1?
93 F7) Why do bash-2.05a and bash-2.05b fail to compile `printf.def' on
94 HP/UX 11.x?
95
96 Section G: How can I get bash to do certain common things?
97
98 G1) How can I get bash to read and display eight-bit characters?
99 G2) How do I write a function `x' to replace builtin command `x', but
100 still invoke the command from within the function?
101 G3) How can I find the value of a shell variable whose name is the value
102 of another shell variable?
103 G4) How can I make the bash `time' reserved word print timing output that
104 looks like the output from my system's /usr/bin/time?
105 G5) How do I get the current directory into my prompt?
106 G6) How can I rename "*.foo" to "*.bar"?
107 G7) How can I translate a filename from uppercase to lowercase?
108 G8) How can I write a filename expansion (globbing) pattern that will match
109 all files in the current directory except "." and ".."?
110
111 Section H: Where do I go from here?
112
113 H1) How do I report bugs in bash, and where should I look for fixes and
114 advice?
115 H2) What kind of bash documentation is there?
116 H3) What's coming in future versions?
117 H4) What's on the bash `wish list'?
118 H5) When will the next release appear?
119
120 ----------
121 Section A: The Basics
122
123 A1) What is it?
124
125 Bash is a Unix command interpreter (shell). It is an implementation of
126 the Posix 1003.2 shell standard, and resembles the Korn and System V
127 shells.
128
129 Bash contains a number of enhancements over those shells, both
130 for interactive use and shell programming. Features geared
131 toward interactive use include command line editing, command
132 history, job control, aliases, and prompt expansion. Programming
133 features include additional variable expansions, shell
134 arithmetic, and a number of variables and options to control
135 shell behavior.
136
137 Bash was originally written by Brian Fox of the Free Software
138 Foundation. The current developer and maintainer is Chet Ramey
139 of Case Western Reserve University.
140
141 A2) What's the latest version?
142
143 The latest version is 2.05b, first made available on Wednesday, 17
144 July, 2002.
145
146 A3) Where can I get it?
147
148 Bash is the GNU project's shell, and so is available from the
149 master GNU archive site, ftp.gnu.org, and its mirrors. The
150 latest version is also available for FTP from ftp.cwru.edu.
151 The following URLs tell how to get version 2.05b:
152
153 ftp://ftp.gnu.org/pub/gnu/bash/bash-2.05b.tar.gz
154 ftp://ftp.cwru.edu/pub/bash/bash-2.05b.tar.gz
155
156 Formatted versions of the documentation are available with the URLs:
157
158 ftp://ftp.gnu.org/pub/gnu/bash/bash-doc-2.05b.tar.gz
159 ftp://ftp.cwru.edu/pub/bash/bash-doc-2.05b.tar.gz
160
161 A4) On what machines will bash run?
162
163 Bash has been ported to nearly every version of UNIX. All you
164 should have to do to build it on a machine for which a port
165 exists is to type `configure' and then `make'. The build process
166 will attempt to discover the version of UNIX you have and tailor
167 itself accordingly, using a script created by GNU autoconf.
168
169 More information appears in the file `INSTALL' in the distribution.
170
171 The Bash web page (http://cnswww.cns.cwru.edu/~chet/bash/bashtop.html)
172 explains how to obtain binary versions of bash for most of the major
173 commercial Unix systems.
174
175 A5) Will bash run on operating systems other than Unix?
176
177 Configuration specifics for Unix-like systems such as QNX and
178 LynxOS are included in the distribution. Bash-2.05 and later
179 versions should compile and run on Minix 2.0 (patches were
180 contributed), but I don't believe anyone has built bash-2.x on
181 earlier Minix versions yet.
182
183 Bash has been ported to versions of Windows implementing the Win32
184 programming interface. This includes Windows 95 and Windows NT.
185 The port was done by Cygnus Solutions as part of their CYGWIN
186 project. For more information about the project, look at the URLs
187
188 http://www.cygwin.com/
189 http://sourceware.cygnus.com/cygwin
190
191 Cygnus originally ported bash-1.14.7, and that port was part of their
192 early GNU-Win32 (the original name) releases. Cygnus has also done a
193 port of bash-2.05 to the CYGWIN environment, and it is available as
194 part of their current release.
195
196 Bash-2.05b should require no local Cygnus changes to build and run under
197 CYGWIN.
198
199 The Cygnus port works only on Intel machines. There is a port of bash
200 (I don't know which version) to the alpha/NT environment available from
201
202 ftp://ftp.gnustep.org//pub/win32/bash-alpha-nt-1.01.tar.gz
203
204 DJ Delorie has a port of bash-2.x which runs under MS-DOS, as part
205 of the DJGPP project. For more information on the project, see
206
207 http://www.delorie.com/djgpp/
208
209 I have been told that the original DJGPP port was done by Daisuke Aoyama.
210
211 Mark Elbrecht <snowball3@bigfoot.com> has sent me notice that bash-2.04
212 is available for DJGPP V2. The files are available as:
213
214 ftp://ftp.simtel.net/pub/simtelnet/gnu/djgpp/v2gnu/bsh204b.zip binary
215 ftp://ftp.simtel.net/pub/simtelnet/gnu/djgpp/v2gnu/bsh204d.zip documentation
216 ftp://ftp.simtel.net/pub/simtelnet/gnu/djgpp/v2gnu/bsh204s.zip source
217
218 Mark has begun to work with bash-2.05, but I don't know the status.
219
220 Ports of bash-1.12 and bash-2.0 are available for OS/2 from
221
222 ftp://hobbes.nmsu.edu/pub/os2/util/shell/bash_112.zip
223 ftp://hobbes.nmsu.edu/pub/os2/util/shell/bash-2.0(253).zip
224
225 I haven't looked at either, but the second appears to be a binary-only
226 distribution. Beware.
227
228 I have received word that Bash (I'm not sure which version, but I
229 believe that it's at least bash-2.02.1) is the standard shell on
230 BeOS.
231
232 A6) How can I build bash with gcc?
233
234 Bash configures to use gcc by default if it is available. Read the
235 file INSTALL in the distribution for more information.
236
237 A7) How can I make bash my login shell?
238
239 Some machines let you use `chsh' to change your login shell. Other
240 systems use `passwd -s' or `passwd -e'. If one of these works for
241 you, that's all you need. Note that many systems require the full
242 pathname to a shell to appear in /etc/shells before you can make it
243 your login shell. For this, you may need the assistance of your
244 friendly local system administrator.
245
246 If you cannot do this, you can still use bash as your login shell, but
247 you need to perform some tricks. The basic idea is to add a command
248 to your login shell's startup file to replace your login shell with
249 bash.
250
251 For example, if your login shell is csh or tcsh, and you have installed
252 bash in /usr/gnu/bin/bash, add the following line to ~/.login:
253
254 if ( -f /usr/gnu/bin/bash ) exec /usr/gnu/bin/bash --login
255
256 (the `--login' tells bash that it is a login shell).
257
258 It's not a good idea to put this command into ~/.cshrc, because every
259 csh you run without the `-f' option, even ones started to run csh scripts,
260 reads that file. If you must put the command in ~/.cshrc, use something
261 like
262
263 if ( $?prompt ) exec /usr/gnu/bin/bash --login
264
265 to ensure that bash is exec'd only when the csh is interactive.
266
267 If your login shell is sh or ksh, you have to do two things.
268
269 First, create an empty file in your home directory named `.bash_profile'.
270 The existence of this file will prevent the exec'd bash from trying to
271 read ~/.profile, and re-execing itself over and over again. ~/.bash_profile
272 is the first file bash tries to read initialization commands from when
273 it is invoked as a login shell.
274
275 Next, add a line similar to the above to ~/.profile:
276
277 [ -f /usr/gnu/bin/bash ] && [ -x /usr/gnu/bin/bash ] && \
278 exec /usr/gnu/bin/bash --login
279
280 This will cause login shells to replace themselves with bash running as
281 a login shell. Once you have this working, you can copy your initialization
282 code from ~/.profile to ~/.bash_profile.
283
284 I have received word that the recipe supplied above is insufficient for
285 machines running CDE. CDE has a maze of twisty little startup files, all
286 slightly different.
287
288 If you cannot change your login shell in the password file to bash, you
289 will have to (apparently) live with CDE using the shell in the password
290 file to run its startup scripts. If you have changed your shell to bash,
291 there is code in the CDE startup files (on Solaris, at least) that attempts
292 to do the right thing. It is, however, often broken, and may require that
293 you use the $BASH_ENV trick described below.
294
295 `dtterm' claims to use $SHELL as the default program to start, so if you
296 can change $SHELL in the CDE startup files, you should be able to use bash
297 in your terminal windows.
298
299 Setting DTSOURCEPROFILE in ~/.dtprofile will cause the `Xsession' program
300 to read your login shell's startup files. You may be able to use bash for
301 the rest of the CDE programs by setting SHELL to bash in ~/.dtprofile as
302 well, but I have not tried this.
303
304 You can use the above `exec' recipe to start bash when not logging in with
305 CDE by testing the value of the DT variable:
306
307 if [ -n "$DT" ]; then
308 [ -f /usr/gnu/bin/bash ] && exec /usr/gnu/bin/bash --login
309 fi
310
311 If CDE starts its shells non-interactively during login, the login shell
312 startup files (~/.profile, ~/.bash_profile) will not be sourced at login.
313 To get around this problem, append a line similar to the following to your
314 ~/.dtprofile:
315
316 BASH_ENV=${HOME}/.bash_profile ; export BASH_ENV
317
318 and add the following line to the beginning of ~/.bash_profile:
319
320 unset BASH_ENV
321
322 A8) I just changed my login shell to bash, and now I can't FTP into my
323 machine. Why not?
324
325 You must add the full pathname to bash to the file /etc/shells. As
326 noted in the answer to the previous question, many systems require
327 this before you can make bash your login shell.
328
329 Most versions of ftpd use this file to prohibit `special' users
330 such as `uucp' and `news' from using FTP.
331
332 A9) What's the `POSIX Shell and Utilities standard'?
333
334 POSIX is a name originally coined by Richard Stallman for a
335 family of open system standards based on UNIX. There are a
336 number of aspects of UNIX under consideration for
337 standardization, from the basic system services at the system
338 call and C library level to applications and tools to system
339 administration and management. Each area of standardization is
340 assigned to a working group in the 1003 series.
341
342 The POSIX Shell and Utilities standard was originally developed by
343 IEEE Working Group 1003.2 (POSIX.2). Today it has been merged with
344 the original 1003.1 Working Group and is maintained by the Austin
345 Group (a joint working group of the IEEE, The Open Group and
346 ISO/IEC SC22/WG15). Today the Shell and Utilities are a volume
347 within the set of documents that make up IEEE Std 1003.1-2001, and
348 thus now the former POSIX.2 (from 1992) is now part of the current
349 POSIX.1 standard (POSIX 1003.1-2001).
350
351 The Shell and Utilities volume concentrates on the command
352 interpreter interface and utility programs commonly executed from
353 the command line or by other programs. The standard is freely
354 available on the web at http://www.UNIX-systems.org/version3/ .
355 Work continues at the Austin Group on maintenance issues; see
356 http://www.opengroup.org/austin/ to join the discussions.
357
358 Bash is concerned with the aspects of the shell's behavior defined
359 by the POSIX Shell and Utilities volume. The shell command
360 language has of course been standardized, including the basic flow
361 control and program execution constructs, I/O redirection and
362 pipelining, argument handling, variable expansion, and quoting.
363
364 The `special' builtins, which must be implemented as part of the
365 shell to provide the desired functionality, are specified as
366 being part of the shell; examples of these are `eval' and
367 `export'. Other utilities appear in the sections of POSIX not
368 devoted to the shell which are commonly (and in some cases must
369 be) implemented as builtin commands, such as `read' and `test'.
370 POSIX also specifies aspects of the shell's interactive
371 behavior as part of the UPE, including job control and command
372 line editing. Only vi-style line editing commands have been
373 standardized; emacs editing commands were left out due to
374 objections.
375
376 The latest version of the POSIX Shell and Utilities standard is
377 available (now updated to the 2003 Edition incorporating the
378 Technical Corrigendum 1), as part of the Single UNIX Specification
379 Version 3 at
380
381 http://www.UNIX-systems.org/version3/
382
383 A10) What is the bash `posix mode'?
384
385 Although bash is an implementation of the POSIX shell
386 specification, there are areas where the bash default behavior
387 differs from that spec. The bash `posix mode' changes the bash
388 behavior in these areas so that it obeys the spec more closely.
389
390 Posix mode is entered by starting bash with the --posix or
391 '-o posix' option or executing `set -o posix' after bash is running.
392
393 The specific aspects of bash which change when posix mode is
394 active are listed in the file POSIX in the bash distribution.
395 They are also listed in a section in the Bash Reference Manual
396 (from which that file is generated).
397
398 Section B: The latest version
399
400 B1) What's new in version 2.05b?
401
402 The raison d'etre for bash-2.05b is to make a second intermediate
403 release containing the first of the new features to be available
404 in bash-3.0 and get feedback on those features before proceeding.
405 The major new feature is multibyte character support in both Bash
406 and Readline.
407
408 Bash-2.05b contains the following new features (see the manual page for
409 complete descriptions and the CHANGES and NEWS files in the bash-2.05b
410 distribution):
411
412 o support for multibyte characters has been added to both bash and readline
413
414 o the DEBUG trap is now run *before* simple commands, ((...)) commands,
415 [[...]] conditional commands, and for ((...)) loops
416
417 o the shell now performs arithmetic in the largest integer size the machine
418 supports (intmax_t)
419
420 o there is a new \D{...} prompt expansion; passes the `...' to strftime(3)
421 and inserts the result into the expanded prompt
422
423 o there is a new `here-string' redirection operator: <<< word
424
425 o when displaying variables, function attributes and definitions are shown
426 separately, allowing them to be re-used as input (attempting to re-use
427 the old output would result in syntax errors).
428
429 o `read' has a new `-u fd' option to read from a specified file descriptor
430
431 o the bash debugger in examples/bashdb has been modified to work with the
432 new DEBUG trap semantics, the command set has been made more gdb-like,
433 and the changes to $LINENO make debugging functions work better
434
435 o the expansion of $LINENO inside a shell function is only relative to the
436 function start if the shell is interactive -- if the shell is running a
437 script, $LINENO expands to the line number in the script. This is as
438 POSIX-2001 requires
439
440
441 A short feature history dating from Bash-2.0:
442
443 Bash-2.05a introduced the following new features:
444
445 o The `printf' builtin has undergone major work
446
447 o There is a new read-only `shopt' option: login_shell, which is set by
448 login shells and unset otherwise
449
450 o New `\A' prompt string escape sequence; expanding to time in 24-hour
451 HH:MM format
452
453 o New `-A group/-g' option to complete and compgen; goes group name
454 completion
455
456 o New [+-]O invocation option to set and unset `shopt' options at startup
457
458 o ksh-like `ERR' trap
459
460 o `for' loops now allow empty word lists after the `in' reserved word
461
462 o new `hard' and `soft' arguments for the `ulimit' builtin
463
464 o Readline can be configured to place the user at the same point on the line
465 when retrieving commands from the history list
466
467 o Readline can be configured to skip `hidden' files (filenames with a leading
468 `.' on Unix) when performing completion
469
470 Bash-2.05 introduced the following new features:
471
472 o This version has once again reverted to using locales and strcoll(3) when
473 processing pattern matching bracket expressions, as POSIX requires.
474 o Added a new `--init-file' invocation argument as a synonym for `--rcfile',
475 per the new GNU coding standards.
476 o The /dev/tcp and /dev/udp redirections now accept service names as well as
477 port numbers.
478 o `complete' and `compgen' now take a `-o value' option, which controls some
479 of the aspects of that compspec. Valid values are:
480
481 default - perform bash default completion if programmable
482 completion produces no matches
483 dirnames - perform directory name completion if programmable
484 completion produces no matches
485 filenames - tell readline that the compspec produces filenames,
486 so it can do things like append slashes to
487 directory names and suppress trailing spaces
488 o A new loadable builtin, realpath, which canonicalizes and expands symlinks
489 in pathname arguments.
490 o When `set' is called without options, it prints function defintions in a
491 way that allows them to be reused as input. This affects `declare' and
492 `declare -p' as well. This only happens when the shell is not in POSIX
493 mode, since POSIX.2 forbids this behavior.
494
495 Bash-2.04 introduced the following new features:
496
497 o Programmable word completion with the new `complete' and `compgen' builtins;
498 examples are provided in examples/complete/complete-examples
499 o `history' has a new `-d' option to delete a history entry
500 o `bind' has a new `-x' option to bind key sequences to shell commands
501 o The prompt expansion code has new `\j' and `\l' escape sequences
502 o The `no_empty_cmd_completion' shell option, if enabled, inhibits
503 command completion when TAB is typed on an empty line
504 o `help' has a new `-s' option to print a usage synopsis
505 o New arithmetic operators: var++, var--, ++var, --var, expr1,expr2 (comma)
506 o New ksh93-style arithmetic for command:
507 for ((expr1 ; expr2; expr3 )); do list; done
508 o `read' has new options: `-t', `-n', `-d', `-s'
509 o The redirection code handles several filenames specially: /dev/fd/N,
510 /dev/stdin, /dev/stdout, /dev/stderr
511 o The redirection code now recognizes /dev/tcp/HOST/PORT and
512 /dev/udp/HOST/PORT and tries to open a TCP or UDP socket, respectively,
513 to the specified port on the specified host
514 o The ${!prefix*} expansion has been implemented
515 o A new FUNCNAME variable, which expands to the name of a currently-executing
516 function
517 o The GROUPS variable is no longer readonly
518 o A new shopt `xpg_echo' variable, to control the behavior of echo with
519 respect to backslash-escape sequences at runtime
520 o The NON_INTERACTIVE_LOGIN_SHELLS #define has returned
521
522 The version of Readline released with Bash-2.04, Readline-4.1, had several
523 new features as well:
524
525 o Parentheses matching is always compiled into readline, and controllable
526 with the new `blink-matching-paren' variable
527 o The history-search-forward and history-search-backward functions now leave
528 point at the end of the line when the search string is empty, like
529 reverse-search-history, and forward-search-history
530 o A new function for applications: rl_on_new_line_with_prompt()
531 o New variables for applications: rl_already_prompted, and rl_gnu_readline_p
532
533
534 Bash-2.03 had very few new features, in keeping with the convention
535 that odd-numbered releases provide mainly bug fixes. A number of new
536 features were added to Readline, mostly at the request of the Cygnus
537 folks.
538
539 A new shopt option, `restricted_shell', so that startup files can test
540 whether or not the shell was started in restricted mode
541 Filename generation is now performed on the words between ( and ) in
542 compound array assignments (this is really a bug fix)
543 OLDPWD is now auto-exported, as POSIX.2 requires
544 ENV and BASH_ENV are read-only variables in a restricted shell
545 Bash may now be linked against an already-installed Readline library,
546 as long as the Readline library is version 4 or newer
547 All shells begun with the `--login' option will source the login shell
548 startup files, even if the shell is not interactive
549
550 There were lots of changes to the version of the Readline library released
551 along with Bash-2.03. For a complete list of the changes, read the file
552 CHANGES in the Bash-2.03 distribution.
553
554 Bash-2.02 contained the following new features:
555
556 a new version of malloc (based on the old GNU malloc code in previous
557 bash versions) that is more page-oriented, more conservative
558 with memory usage, does not `orphan' large blocks when they
559 are freed, is usable on 64-bit machines, and has allocation
560 checking turned on unconditionally
561 POSIX.2-style globbing character classes ([:alpha:], [:alnum:], etc.)
562 POSIX.2-style globbing equivalence classes
563 POSIX.2-style globbing collating symbols
564 the ksh [[...]] extended conditional command
565 the ksh egrep-style extended pattern matching operators
566 a new `printf' builtin
567 the ksh-like $(<filename) command substitution, which is equivalent to
568 $(cat filename)
569 new tilde prefixes that expand to directories from the directory stack
570 new `**' arithmetic operator to do exponentiation
571 case-insensitive globbing (filename expansion)
572 menu completion a la tcsh
573 `magic-space' history expansion function like tcsh
574 the readline inputrc `language' has a new file inclusion directive ($include)
575
576 Bash-2.01 contained only a few new features:
577
578 new `GROUPS' builtin array variable containing the user's group list
579 new bindable readline commands: history-and-alias-expand-line and
580 alias-expand-line
581
582 Bash-2.0 contained extensive changes and new features from bash-1.14.7.
583 Here's a short list:
584
585 new `time' reserved word to time pipelines, shell builtins, and
586 shell functions
587 one-dimensional arrays with a new compound assignment statement,
588 appropriate expansion constructs and modifications to some
589 of the builtins (read, declare, etc.) to use them
590 new quoting syntaxes for ANSI-C string expansion and locale-specific
591 string translation
592 new expansions to do substring extraction, pattern replacement, and
593 indirect variable expansion
594 new builtins: `disown' and `shopt'
595 new variables: HISTIGNORE, SHELLOPTS, PIPESTATUS, DIRSTACK, GLOBIGNORE,
596 MACHTYPE, BASH_VERSINFO
597 special handling of many unused or redundant variables removed
598 (e.g., $notify, $glob_dot_filenames, $no_exit_on_failed_exec)
599 dynamic loading of new builtin commands; many loadable examples provided
600 new prompt expansions: \a, \e, \n, \H, \T, \@, \v, \V
601 history and aliases available in shell scripts
602 new readline variables: enable-keypad, mark-directories, input-meta,
603 visible-stats, disable-completion, comment-begin
604 new readline commands to manipulate the mark and operate on the region
605 new readline emacs mode commands and bindings for ksh-88 compatibility
606 updated and extended builtins
607 new DEBUG trap
608 expanded (and now documented) restricted shell mode
609
610 implementation stuff:
611 autoconf-based configuration
612 nearly all of the bugs reported since version 1.14 have been fixed
613 most builtins converted to use builtin `getopt' for consistency
614 most builtins use -p option to display output in a reusable form
615 (for consistency)
616 grammar tighter and smaller (66 reduce-reduce conflicts gone)
617 lots of code now smaller and faster
618 test suite greatly expanded
619
620 B2) Are there any user-visible incompatibilities between bash-2.05b and
621 bash-1.14.7?
622
623 There are a few incompatibilities between version 1.14.7 and version 2.05b.
624 They are detailed in the file COMPAT in the bash distribution. That file
625 is not meant to be all-encompassing; send mail to bash-maintainers@gnu.org
626 if if you find something that's not mentioned there.
627
628 Section C: Differences from other Unix shells
629
630 C1) How does bash differ from sh, the Bourne shell?
631
632 This is a non-comprehensive list of features that differentiate bash
633 from the SVR4.2 shell. The bash manual page explains these more
634 completely.
635
636 Things bash has that sh does not:
637 long invocation options
638 [+-]O invocation option
639 -l invocation option
640 `!' reserved word to invert pipeline return value
641 `time' reserved word to time pipelines and shell builtins
642 the `function' reserved word
643 the `select' compound command and reserved word
644 arithmetic for command: for ((expr1 ; expr2; expr3 )); do list; done
645 new $'...' and $"..." quoting
646 the $(...) form of command substitution
647 the $(<filename) form of command substitution, equivalent to
648 $(cat filename)
649 the ${#param} parameter value length operator
650 the ${!param} indirect parameter expansion operator
651 the ${!param*} prefix expansion operator
652 the ${param:offset[:length]} parameter substring operator
653 the ${param/pat[/string]} parameter pattern substitution operator
654 expansions to perform substring removal (${p%[%]w}, ${p#[#]w})
655 expansion of positional parameters beyond $9 with ${num}
656 variables: BASH, BASH_VERSION, BASH_VERSINFO, UID, EUID, REPLY,
657 TIMEFORMAT, PPID, PWD, OLDPWD, SHLVL, RANDOM, SECONDS,
658 LINENO, HISTCMD, HOSTTYPE, OSTYPE, MACHTYPE, HOSTNAME,
659 ENV, PS3, PS4, DIRSTACK, PIPESTATUS, HISTSIZE, HISTFILE,
660 HISTFILESIZE, HISTCONTROL, HISTIGNORE, GLOBIGNORE, GROUPS,
661 PROMPT_COMMAND, FCEDIT, FIGNORE, IGNOREEOF, INPUTRC,
662 SHELLOPTS, OPTERR, HOSTFILE, TMOUT, FUNCNAME, histchars,
663 auto_resume
664 DEBUG trap
665 ERR trap
666 variable arrays with new compound assignment syntax
667 redirections: <>, &>, >|, <<<, [n]<&word-, [n]>&word-
668 prompt string special char translation and variable expansion
669 auto-export of variables in initial environment
670 command search finds functions before builtins
671 bash return builtin will exit a file sourced with `.'
672 builtins: cd -/-L/-P, exec -l/-c/-a, echo -e/-E, hash -d/-l/-p/-t.
673 export -n/-f/-p/name=value, pwd -L/-P,
674 read -e/-p/-a/-t/-n/-d/-s/-u,
675 readonly -a/-f/name=value, trap -l, set +o,
676 set -b/-m/-o option/-h/-p/-B/-C/-H/-P,
677 unset -f/-v, ulimit -m/-p/-u,
678 type -a/-p/-t/-f/-P, suspend -f, kill -n,
679 test -o optname/s1 == s2/s1 < s2/s1 > s2/-nt/-ot/-ef/-O/-G/-S
680 bash reads ~/.bashrc for interactive shells, $ENV for non-interactive
681 bash restricted shell mode is more extensive
682 bash allows functions and variables with the same name
683 brace expansion
684 tilde expansion
685 arithmetic expansion with $((...)) and `let' builtin
686 the `[[...]]' extended conditional command
687 process substitution
688 aliases and alias/unalias builtins
689 local variables in functions and `local' builtin
690 readline and command-line editing with programmable completion
691 command history and history/fc builtins
692 csh-like history expansion
693 other new bash builtins: bind, command, compgen, complete, builtin,
694 declare/typeset, dirs, enable, fc, help,
695 history, logout, popd, pushd, disown, shopt,
696 printf
697 exported functions
698 filename generation when using output redirection (command >a*)
699 POSIX.2-style globbing character classes
700 POSIX.2-style globbing equivalence classes
701 POSIX.2-style globbing collating symbols
702 egrep-like extended pattern matching operators
703 case-insensitive pattern matching and globbing
704 variable assignments preceding commands affect only that command,
705 even for builtins and functions
706 posix mode
707 redirection to /dev/fd/N, /dev/stdin, /dev/stdout, /dev/stderr,
708 /dev/tcp/host/port, /dev/udp/host/port
709
710 Things sh has that bash does not:
711 uses variable SHACCT to do shell accounting
712 includes `stop' builtin (bash can use alias stop='kill -s STOP')
713 `newgrp' builtin
714 turns on job control if called as `jsh'
715 $TIMEOUT (like bash $TMOUT)
716 `^' is a synonym for `|'
717 new SVR4.2 sh builtins: mldmode, priv
718
719 Implementation differences:
720 redirection to/from compound commands causes sh to create a subshell
721 bash does not allow unbalanced quotes; sh silently inserts them at EOF
722 bash does not mess with signal 11
723 sh sets (euid, egid) to (uid, gid) if -p not supplied and uid < 100
724 bash splits only the results of expansions on IFS, using POSIX.2
725 field splitting rules; sh splits all words on IFS
726 sh does not allow MAILCHECK to be unset (?)
727 sh does not allow traps on SIGALRM or SIGCHLD
728 bash allows multiple option arguments when invoked (e.g. -x -v);
729 sh allows only a single option argument (`sh -x -v' attempts
730 to open a file named `-v', and, on SunOS 4.1.4, dumps core.
731 On Solaris 2.4 and earlier versions, sh goes into an infinite
732 loop.)
733 sh exits a script if any builtin fails; bash exits only if one of
734 the POSIX.2 `special' builtins fails
735
736 C2) How does bash differ from the Korn shell, version ksh88?
737
738 Things bash has or uses that ksh88 does not:
739 long invocation options
740 [-+]O invocation option
741 -l invocation option
742 `!' reserved word
743 arithmetic for command: for ((expr1 ; expr2; expr3 )); do list; done
744 arithmetic in largest machine-supported size (intmax_t)
745 posix mode and posix conformance
746 command hashing
747 tilde expansion for assignment statements that look like $PATH
748 process substitution with named pipes if /dev/fd is not available
749 the ${!param} indirect parameter expansion operator
750 the ${!param*} prefix expansion operator
751 the ${param:offset[:length]} parameter substring operator
752 the ${param/pat[/string]} parameter pattern substitution operator
753 variables: BASH, BASH_VERSION, BASH_VERSINFO, UID, EUID, SHLVL,
754 TIMEFORMAT, HISTCMD, HOSTTYPE, OSTYPE, MACHTYPE,
755 HISTFILESIZE, HISTIGNORE, HISTCONTROL, PROMPT_COMMAND,
756 IGNOREEOF, FIGNORE, INPUTRC, HOSTFILE, DIRSTACK,
757 PIPESTATUS, HOSTNAME, OPTERR, SHELLOPTS, GLOBIGNORE,
758 GROUPS, FUNCNAME, histchars, auto_resume
759 prompt expansion with backslash escapes and command substitution
760 redirection: &> (stdout and stderr), <<<, [n]<&word-, [n]>&word-
761 more extensive and extensible editing and programmable completion
762 builtins: bind, builtin, command, declare, dirs, echo -e/-E, enable,
763 exec -l/-c/-a, fc -s, export -n/-f/-p, hash, help, history,
764 jobs -x/-r/-s, kill -s/-n/-l, local, logout, popd, pushd,
765 read -e/-p/-a/-t/-n/-d/-s, readonly -a/-n/-f/-p,
766 set -o braceexpand/-o histexpand/-o interactive-comments/
767 -o notify/-o physical/-o posix/-o hashall/-o onecmd/
768 -h/-B/-C/-b/-H/-P, set +o, suspend, trap -l, type,
769 typeset -a/-F/-p, ulimit -u, umask -S, alias -p, shopt,
770 disown, printf, complete, compgen
771 `!' csh-style history expansion
772 POSIX.2-style globbing character classes
773 POSIX.2-style globbing equivalence classes
774 POSIX.2-style globbing collating symbols
775 egrep-like extended pattern matching operators
776 case-insensitive pattern matching and globbing
777 `**' arithmetic operator to do exponentiation
778 redirection to /dev/fd/N, /dev/stdin, /dev/stdout, /dev/stderr
779 arrays of unlimited size
780 TMOUT is default timeout for `read' and `select'
781
782 Things ksh88 has or uses that bash does not:
783 tracked aliases (alias -t)
784 variables: ERRNO, FPATH, EDITOR, VISUAL
785 co-processes (|&, >&p, <&p)
786 weirdly-scoped functions
787 typeset +f to list all function names without definitions
788 text of command history kept in a file, not memory
789 builtins: alias -x, cd old new, fc -e -, newgrp, print,
790 read -p/-s/var?prompt, set -A/-o gmacs/
791 -o bgnice/-o markdirs/-o nolog/-o trackall/-o viraw/-s,
792 typeset -H/-L/-R/-Z/-A/-ft/-fu/-fx/-l/-u/-t, whence
793 using environment to pass attributes of exported variables
794 arithmetic evaluation done on arguments to some builtins
795 reads .profile from $PWD when invoked as login shell
796
797 Implementation differences:
798 ksh runs last command of a pipeline in parent shell context
799 bash has brace expansion by default (ksh88 compile-time option)
800 bash has fixed startup file for all interactive shells; ksh reads $ENV
801 bash has exported functions
802 bash command search finds functions before builtins
803 bash waits for all commands in pipeline to exit before returning status
804 emacs-mode editing has some slightly different key bindings
805
806 C3) Which new features in ksh-93 are not in bash, and which are?
807
808 New things in ksh-93 not in bash-2.05b:
809 associative arrays
810 floating point arithmetic and variables
811 math library functions
812 ${!name[sub]} name of subscript for associative array
813 `.' is allowed in variable names to create a hierarchical namespace
814 more extensive compound assignment syntax
815 discipline functions
816 `sleep' and `getconf' builtins (bash has loadable versions)
817 typeset -n and `nameref' variables
818 KEYBD trap
819 variables: .sh.edchar, .sh.edmode, .sh.edcol, .sh.edtext, .sh.version,
820 .sh.name, .sh.subscript, .sh.value, .sh.match, HISTEDIT
821 backreferences in pattern matching (\N)
822 `&' operator in pattern lists for matching
823 print -f (bash uses printf)
824 `fc' has been renamed to `hist'
825 `.' can execute shell functions
826 exit statuses between 0 and 255
827 set -o pipefail
828 `+=' variable assignment operator
829 FPATH and PATH mixing
830 getopts -a
831 -I invocation option
832 DEBUG trap now executed before each simple command, instead of after
833 printf %H, %P, %T, %Z modifiers, output base for %d
834 lexical scoping for local variables in `ksh' functions
835 no scoping for local variables in `POSIX' functions
836
837 New things in ksh-93 present in bash-2.05b:
838 [n]<&word- and [n]>&word- redirections (combination dup and close)
839 for (( expr1; expr2; expr3 )) ; do list; done - arithmetic for command
840 ?:, ++, --, `expr1 , expr2' arithmetic operators
841 expansions: ${!param}, ${param:offset[:len]}, ${param/pat[/str]},
842 ${!param*}
843 compound array assignment
844 the `!' reserved word
845 loadable builtins -- but ksh uses `builtin' while bash uses `enable'
846 `command', `builtin', `disown' builtins
847 new $'...' and $"..." quoting
848 FIGNORE (but bash uses GLOBIGNORE), HISTCMD
849 set -o notify/-C
850 changes to kill builtin
851 read -A (bash uses read -a)
852 read -t/-d
853 trap -p
854 exec -c/-a
855 `.' restores the positional parameters when it completes
856 POSIX.2 `test'
857 umask -S
858 unalias -a
859 command and arithmetic substitution performed on PS1, PS4, and ENV
860 command name completion
861 ENV processed only for interactive shells
862
863 Section D: Why does bash do some things differently than other Unix shells?
864
865 D1) Why does bash run a different version of `command' than
866 `which command' says it will?
867
868 On many systems, `which' is actually a csh script that assumes
869 you're running csh. In tcsh, `which' and its cousin `where'
870 are builtins. On other Unix systems, `which' is a perl script
871 that uses the PATH environment variable.
872
873 The csh script version reads the csh startup files from your
874 home directory and uses those to determine which `command' will
875 be invoked. Since bash doesn't use any of those startup files,
876 there's a good chance that your bash environment differs from
877 your csh environment. The bash `type' builtin does everything
878 `which' does, and will report correct results for the running
879 shell. If you're really wedded to the name `which', try adding
880 the following function definition to your .bashrc:
881
882 which()
883 {
884 builtin type "$@"
885 }
886
887 If you're moving from tcsh and would like to bring `where' along
888 as well, use this function:
889
890 where()
891 {
892 builtin type -a "$@"
893 }
894
895 D2) Why doesn't bash treat brace expansions exactly like csh?
896
897 The only difference between bash and csh brace expansion is that
898 bash requires a brace expression to contain at least one unquoted
899 comma if it is to be expanded. Any brace-surrounded word not
900 containing an unquoted comma is left unchanged by the brace
901 expansion code. This affords the greatest degree of sh
902 compatibility.
903
904 Bash, ksh, zsh, and pd-ksh all implement brace expansion this way.
905
906 D3) Why doesn't bash have csh variable modifiers?
907
908 Posix has specified a more powerful, albeit somewhat more cryptic,
909 mechanism cribbed from ksh, and bash implements it.
910
911 ${parameter%word}
912 Remove smallest suffix pattern. The WORD is expanded to produce
913 a pattern. It then expands to the value of PARAMETER, with the
914 smallest portion of the suffix matched by the pattern deleted.
915
916 x=file.c
917 echo ${x%.c}.o
918 -->file.o
919
920 ${parameter%%word}
921
922 Remove largest suffix pattern. The WORD is expanded to produce
923 a pattern. It then expands to the value of PARAMETER, with the
924 largest portion of the suffix matched by the pattern deleted.
925
926 x=posix/src/std
927 echo ${x%%/*}
928 -->posix
929
930 ${parameter#word}
931 Remove smallest prefix pattern. The WORD is expanded to produce
932 a pattern. It then expands to the value of PARAMETER, with the
933 smallest portion of the prefix matched by the pattern deleted.
934
935 x=$HOME/src/cmd
936 echo ${x#$HOME}
937 -->/src/cmd
938
939 ${parameter##word}
940 Remove largest prefix pattern. The WORD is expanded to produce
941 a pattern. It then expands to the value of PARAMETER, with the
942 largest portion of the prefix matched by the pattern deleted.
943
944 x=/one/two/three
945 echo ${x##*/}
946 -->three
947
948
949 Given
950 a=/a/b/c/d
951 b=b.xxx
952
953 csh bash result
954 --- ---- ------
955 $a:h ${a%/*} /a/b/c
956 $a:t ${a##*/} d
957 $b:r ${b%.*} b
958 $b:e ${b##*.} xxx
959
960
961 D4) How can I make my csh aliases work when I convert to bash?
962
963 Bash uses a different syntax to support aliases than csh does.
964 The details can be found in the documentation. We have provided
965 a shell script which does most of the work of conversion for you;
966 this script can be found in ./examples/misc/aliasconv.sh. Here is
967 how you use it:
968
969 Start csh in the normal way for you. (e.g., `csh')
970
971 Pipe the output of `alias' through `aliasconv.sh', saving the
972 results into `bash_aliases':
973
974 alias | bash aliasconv.sh >bash_aliases
975
976 Edit `bash_aliases', carefully reading through any created
977 functions. You will need to change the names of some csh specific
978 variables to the bash equivalents. The script converts $cwd to
979 $PWD, $term to $TERM, $home to $HOME, $user to $USER, and $prompt
980 to $PS1. You may also have to add quotes to avoid unwanted
981 expansion.
982
983 For example, the csh alias:
984
985 alias cd 'cd \!*; echo $cwd'
986
987 is converted to the bash function:
988
989 cd () { command cd "$@"; echo $PWD ; }
990
991 The only thing that needs to be done is to quote $PWD:
992
993 cd () { command cd "$@"; echo "$PWD" ; }
994
995 Merge the edited file into your ~/.bashrc.
996
997 There is an additional, more ambitious, script in
998 examples/misc/cshtobash that attempts to convert your entire csh
999 environment to its bash equivalent. This script can be run as
1000 simply `cshtobash' to convert your normal interactive
1001 environment, or as `cshtobash ~/.login' to convert your login
1002 environment.
1003
1004 D5) How can I pipe standard output and standard error from one command to
1005 another, like csh does with `|&'?
1006
1007 Use
1008 command 2>&1 | command2
1009
1010 The key is to remember that piping is performed before redirection, so
1011 file descriptor 1 points to the pipe when it is duplicated onto file
1012 descriptor 2.
1013
1014 D6) Now that I've converted from ksh to bash, are there equivalents to
1015 ksh features like autoloaded functions and the `whence' command?
1016
1017 There are features in ksh-88 and ksh-93 that do not have direct bash
1018 equivalents. Most, however, can be emulated with very little trouble.
1019
1020 ksh-88 feature Bash equivalent
1021 -------------- ---------------
1022 compiled-in aliases set up aliases in .bashrc; some ksh aliases are
1023 bash builtins (hash, history, type)
1024 coprocesses named pipe pairs (one for read, one for write)
1025 typeset +f declare -F
1026 cd, print, whence function substitutes in examples/functions/kshenv
1027 autoloaded functions examples/functions/autoload is the same as typeset -fu
1028 read var?prompt read -p prompt var
1029
1030 ksh-93 feature Bash equivalent
1031 -------------- ---------------
1032 sleep, getconf Bash has loadable versions in examples/loadables
1033 ${.sh.version} $BASH_VERSION
1034 print -f printf
1035 hist alias hist=fc
1036 $HISTEDIT $FCEDIT
1037
1038 Section E: How can I get bash to do certain things, and why does bash do
1039 things the way it does?
1040
1041 E1) Why is the bash builtin `test' slightly different from /bin/test?
1042
1043 The specific example used here is [ ! x -o x ], which is false.
1044
1045 Bash's builtin `test' implements the Posix.2 spec, which can be
1046 summarized as follows (the wording is due to David Korn):
1047
1048 Here is the set of rules for processing test arguments.
1049
1050 0 Args: False
1051 1 Arg: True iff argument is not null.
1052 2 Args: If first arg is !, True iff second argument is null.
1053 If first argument is unary, then true if unary test is true
1054 Otherwise error.
1055 3 Args: If second argument is a binary operator, do binary test of $1 $3
1056 If first argument is !, negate two argument test of $2 $3
1057 If first argument is `(' and third argument is `)', do the
1058 one-argument test of the second argument.
1059 Otherwise error.
1060 4 Args: If first argument is !, negate three argument test of $2 $3 $4.
1061 Otherwise unspecified
1062 5 or more Args: unspecified. (Historical shells would use their
1063 current algorithm).
1064
1065 The operators -a and -o are considered binary operators for the purpose
1066 of the 3 Arg case.
1067
1068 As you can see, the test becomes (not (x or x)), which is false.
1069
1070 E2) Why does bash sometimes say `Broken pipe'?
1071
1072 If a sequence of commands appears in a pipeline, and one of the
1073 reading commands finishes before the writer has finished, the
1074 writer receives a SIGPIPE signal. Many other shells special-case
1075 SIGPIPE as an exit status in the pipeline and do not report it.
1076 For example, in:
1077
1078 ps -aux | head
1079
1080 `head' can finish before `ps' writes all of its output, and ps
1081 will try to write on a pipe without a reader. In that case, bash
1082 will print `Broken pipe' to stderr when ps is killed by a
1083 SIGPIPE.
1084
1085 You can build a version of bash that will not report SIGPIPE errors
1086 by uncommenting the definition of DONT_REPORT_SIGPIPE in the file
1087 config-top.h.
1088
1089 E3) When I have terminal escape sequences in my prompt, why does bash
1090 wrap lines at the wrong column?
1091
1092 Readline, the line editing library that bash uses, does not know
1093 that the terminal escape sequences do not take up space on the
1094 screen. The redisplay code assumes, unless told otherwise, that
1095 each character in the prompt is a `printable' character that
1096 takes up one character position on the screen.
1097
1098 You can use the bash prompt expansion facility (see the PROMPTING
1099 section in the manual page) to tell readline that sequences of
1100 characters in the prompt strings take up no screen space.
1101
1102 Use the \[ escape to begin a sequence of non-printing characters,
1103 and the \] escape to signal the end of such a sequence.
1104
1105 E4) If I pipe the output of a command into `read variable', why doesn't
1106 the output show up in $variable when the read command finishes?
1107
1108 This has to do with the parent-child relationship between Unix
1109 processes. It affects all commands run in pipelines, not just
1110 simple calls to `read'. For example, piping a command's output
1111 into a `while' loop that repeatedly calls `read' will result in
1112 the same behavior.
1113
1114 Each element of a pipeline runs in a separate process, a child of
1115 the shell running the pipeline. A subprocess cannot affect its
1116 parent's environment. When the `read' command sets the variable
1117 to the input, that variable is set only in the subshell, not the
1118 parent shell. When the subshell exits, the value of the variable
1119 is lost.
1120
1121 Many pipelines that end with `read variable' can be converted
1122 into command substitutions, which will capture the output of
1123 a specified command. The output can then be assigned to a
1124 variable:
1125
1126 grep ^gnu /usr/lib/news/active | wc -l | read ngroup
1127
1128 can be converted into
1129
1130 ngroup=$(grep ^gnu /usr/lib/news/active | wc -l)
1131
1132 This does not, unfortunately, work to split the text among
1133 multiple variables, as read does when given multiple variable
1134 arguments. If you need to do this, you can either use the
1135 command substitution above to read the output into a variable
1136 and chop up the variable using the bash pattern removal
1137 expansion operators or use some variant of the following
1138 approach.
1139
1140 Say /usr/local/bin/ipaddr is the following shell script:
1141
1142 #! /bin/sh
1143 host `hostname` | awk '/address/ {print $NF}'
1144
1145 Instead of using
1146
1147 /usr/local/bin/ipaddr | read A B C D
1148
1149 to break the local machine's IP address into separate octets, use
1150
1151 OIFS="$IFS"
1152 IFS=.
1153 set -- $(/usr/local/bin/ipaddr)
1154 IFS="$OIFS"
1155 A="$1" B="$2" C="$3" D="$4"
1156
1157 Beware, however, that this will change the shell's positional
1158 parameters. If you need them, you should save them before doing
1159 this.
1160
1161 This is the general approach -- in most cases you will not need to
1162 set $IFS to a different value.
1163
1164 Some other user-supplied alternatives include:
1165
1166 read A B C D << HERE
1167 $(IFS=.; echo $(/usr/local/bin/ipaddr))
1168 HERE
1169
1170 and, where process substitution is available,
1171
1172 read A B C D < <(IFS=.; echo $(/usr/local/bin/ipaddr))
1173
1174 E5) I have a bunch of shell scripts that use backslash-escaped characters
1175 in arguments to `echo'. Bash doesn't interpret these characters. Why
1176 not, and how can I make it understand them?
1177
1178 This is the behavior of echo on most Unix System V machines.
1179
1180 The bash builtin `echo' is modeled after the 9th Edition
1181 Research Unix version of `echo'. It does not interpret
1182 backslash-escaped characters in its argument strings by default;
1183 it requires the use of the -e option to enable the
1184 interpretation. The System V echo provides no way to disable the
1185 special characters; the bash echo has a -E option to disable
1186 them.
1187
1188 There is a configuration option that will make bash behave like
1189 the System V echo and interpret things like `\t' by default. Run
1190 configure with the --enable-xpg-echo-default option to turn this
1191 on. Be aware that this will cause some of the tests run when you
1192 type `make tests' to fail.
1193
1194 There is a shell option, `xpg_echo', settable with `shopt', that will
1195 change the behavior of echo at runtime. Enabling this option turns
1196 on expansion of backslash-escape sequences.
1197
1198 E6) Why doesn't a while or for loop get suspended when I type ^Z?
1199
1200 This is a consequence of how job control works on Unix. The only
1201 thing that can be suspended is the process group. This is a single
1202 command or pipeline of commands that the shell forks and executes.
1203
1204 When you run a while or for loop, the only thing that the shell forks
1205 and executes are any commands in the while loop test and commands in
1206 the loop bodies. These, therefore, are the only things that can be
1207 suspended when you type ^Z.
1208
1209 If you want to be able to stop the entire loop, you need to put it
1210 within parentheses, which will force the loop into a subshell that
1211 may be stopped (and subsequently restarted) as a single unit.
1212
1213 E7) What about empty for loops in Makefiles?
1214
1215 It's fairly common to see constructs like this in automatically-generated
1216 Makefiles:
1217
1218 SUBDIRS = @SUBDIRS@
1219
1220 ...
1221
1222 subdirs-clean:
1223 for d in ${SUBDIRS}; do \
1224 ( cd $$d && ${MAKE} ${MFLAGS} clean ) \
1225 done
1226
1227 When SUBDIRS is empty, this results in a command like this being passed to
1228 bash:
1229
1230 for d in ; do
1231 ( cd $d && ${MAKE} ${MFLAGS} clean )
1232 done
1233
1234 In versions of bash before bash-2.05a, this was a syntax error. If the
1235 reserved word `in' was present, a word must follow it before the semicolon
1236 or newline. The language in the manual page referring to the list of words
1237 being empty referred to the list after it is expanded. These versions of
1238 bash required that there be at least one word following the `in' when the
1239 construct was parsed.
1240
1241 The idiomatic Makefile solution is something like:
1242
1243 SUBDIRS = @SUBDIRS@
1244
1245 subdirs-clean:
1246 subdirs=$SUBDIRS ; for d in $$subdirs; do \
1247 ( cd $$d && ${MAKE} ${MFLAGS} clean ) \
1248 done
1249
1250 The latest drafts of the updated POSIX standard have changed this: the
1251 word list is no longer required. Bash versions 2.05a and later accept
1252 the new syntax.
1253
1254 E8) Why does the arithmetic evaluation code complain about `08'?
1255
1256 The bash arithmetic evaluation code (used for `let', $(()), (()), and in
1257 other places), interprets a leading `0' in numeric constants as denoting
1258 an octal number, and a leading `0x' as denoting hexadecimal. This is
1259 in accordance with the POSIX.2 spec, section 2.9.2.1, which states that
1260 arithmetic constants should be handled as signed long integers as defined
1261 by the ANSI/ISO C standard.
1262
1263 The POSIX.2 interpretation committee has confirmed this:
1264
1265 http://www.pasc.org/interps/unofficial/db/p1003.2/pasc-1003.2-173.html
1266
1267 E9) Why does the pattern matching expression [A-Z]* match files beginning
1268 with every letter except `z'?
1269
1270 Bash-2.03, Bash-2.05 and later versions honor the current locale setting
1271 when processing ranges within pattern matching bracket expressions ([A-Z]).
1272 This is what POSIX.2 and SUSv3/XPG6 specify.
1273
1274 The behavior of the matcher in bash-2.05 and later versions depends on the
1275 current LC_COLLATE setting. Setting this variable to `C' or `POSIX' will
1276 result in the traditional behavior ([A-Z] matches all uppercase ASCII
1277 characters). Many other locales, including the en_US locale (the default
1278 on many US versions of Linux) collate the upper and lower case letters like
1279 this:
1280
1281 AaBb...Zz
1282
1283 which means that [A-Z] matches every letter except `z'. Others collate like
1284
1285 aAbBcC...zZ
1286
1287 which means that [A-Z] matches every letter except `a'.
1288
1289 The portable way to specify upper case letters is [:upper:] instead of
1290 A-Z; lower case may be specified as [:lower:] instead of a-z.
1291
1292 Look at the manual pages for setlocale(3), strcoll(3), and, if it is
1293 present, locale(1). If you have locale(1), you can use it to find
1294 your current locale information even if you do not have any of the
1295 LC_ variables set.
1296
1297 My advice is to put
1298
1299 export LC_COLLATE=C
1300
1301 into /etc/profile and inspect any shell scripts run from cron for
1302 constructs like [A-Z]. This will prevent things like
1303
1304 rm [A-Z]*
1305
1306 from removing every file in the current directory except those beginning
1307 with `z' and still allow individual users to change the collation order.
1308 Users may put the above command into their own profiles as well, of course.
1309
1310 E10) Why does `cd //' leave $PWD as `//'?
1311
1312 POSIX.2, in its description of `cd', says that *three* or more leading
1313 slashes may be replaced with a single slash when canonicalizing the
1314 current working directory.
1315
1316 This is, I presume, for historical compatibility. Certain versions of
1317 Unix, and early network file systems, used paths of the form
1318 //hostname/path to access `path' on server `hostname'.
1319
1320 E11) If I resize my xterm while another program is running, why doesn't bash
1321 notice the change?
1322
1323 This is another issue that deals with job control.
1324
1325 The kernel maintains a notion of a current terminal process group. Members
1326 of this process group (processes whose process group ID is equal to the
1327 current terminal process group ID) receive terminal-generated signals like
1328 SIGWINCH. (For more details, see the JOB CONTROL section of the bash
1329 man page.)
1330
1331 If a terminal is resized, the kernel sends SIGWINCH to each member of
1332 the terminal's current process group (the `foreground' process group).
1333
1334 When bash is running with job control enabled, each pipeline (which may be
1335 a single command) is run in its own process group, different from bash's
1336 process group. This foreground process group receives the SIGWINCH; bash
1337 does not. Bash has no way of knowing that the terminal has been resized.
1338
1339 There is a `checkwinsize' option, settable with the `shopt' builtin, that
1340 will cause bash to check the window size and adjust its idea of the
1341 terminal's dimensions each time a process stops or exits and returns control
1342 of the terminal to bash. Enable it with `shopt -s checkwinsize'.
1343
1344 E12) Why don't negative offsets in substring expansion work like I expect?
1345
1346 When substring expansion of the form ${param:offset[:length} is used,
1347 an `offset' that evaluates to a number less than zero counts back from
1348 the end of the expanded value of $param.
1349
1350 When a negative `offset' begins with a minus sign, however, unexpected things
1351 can happen. Consider
1352
1353 a=12345678
1354 echo ${a:-4}
1355
1356 intending to print the last four characters of $a. The problem is that
1357 ${param:-word} already has a well-defined meaning: expand to word if the
1358 expanded value of param is unset or null, and $param otherwise.
1359
1360 To use negative offsets that begin with a minus sign, separate the
1361 minus sign and the colon with a space.
1362
1363 Section F: Things to watch out for on certain Unix versions
1364
1365 F1) Why can't I use command line editing in my `cmdtool'?
1366
1367 The problem is `cmdtool' and bash fighting over the input. When
1368 scrolling is enabled in a cmdtool window, cmdtool puts the tty in
1369 `raw mode' to permit command-line editing using the mouse for
1370 applications that cannot do it themselves. As a result, bash and
1371 cmdtool each try to read keyboard input immediately, with neither
1372 getting enough of it to be useful.
1373
1374 This mode also causes cmdtool to not implement many of the
1375 terminal functions and control sequences appearing in the
1376 `sun-cmd' termcap entry. For a more complete explanation, see
1377 that file examples/suncmd.termcap in the bash distribution.
1378
1379 `xterm' is a better choice, and gets along with bash much more
1380 smoothly.
1381
1382 If you must use cmdtool, you can use the termcap description in
1383 examples/suncmd.termcap. Set the TERMCAP variable to the terminal
1384 description contained in that file, i.e.
1385
1386 TERMCAP='Mu|sun-cmd:am:bs:km:pt:li#34:co#80:cl=^L:ce=\E[K:cd=\E[J:rs=\E[s:'
1387
1388 Then export TERMCAP and start a new cmdtool window from that shell.
1389 The bash command-line editing should behave better in the new
1390 cmdtool. If this works, you can put the assignment to TERMCAP
1391 in your bashrc file.
1392
1393 F2) I built bash on Solaris 2. Why do globbing expansions and filename
1394 completion chop off the first few characters of each filename?
1395
1396 This is the consequence of building bash on SunOS 5 and linking
1397 with the libraries in /usr/ucblib, but using the definitions
1398 and structures from files in /usr/include.
1399
1400 The actual conflict is between the dirent structure in
1401 /usr/include/dirent.h and the struct returned by the version of
1402 `readdir' in libucb.a (a 4.3-BSD style `struct direct').
1403
1404 Make sure you've got /usr/ccs/bin ahead of /usr/ucb in your $PATH
1405 when configuring and building bash. This will ensure that you
1406 use /usr/ccs/bin/cc or acc instead of /usr/ucb/cc and that you
1407 link with libc before libucb.
1408
1409 If you have installed the Sun C compiler, you may also need to
1410 put /usr/ccs/bin and /opt/SUNWspro/bin into your $PATH before
1411 /usr/ucb.
1412
1413 F3) Why does bash dump core after I interrupt username completion or
1414 `~user' tilde expansion on a machine running NIS?
1415
1416 This is a famous and long-standing bug in the SunOS YP (sorry, NIS)
1417 client library, which is part of libc.
1418
1419 The YP library code keeps static state -- a pointer into the data
1420 returned from the server. When YP initializes itself (setpwent),
1421 it looks at this pointer and calls free on it if it's non-null.
1422 So far, so good.
1423
1424 If one of the YP functions is interrupted during getpwent (the
1425 exact function is interpretwithsave()), and returns NULL, the
1426 pointer is freed without being reset to NULL, and the function
1427 returns. The next time getpwent is called, it sees that this
1428 pointer is non-null, calls free, and the bash free() blows up
1429 because it's being asked to free freed memory.
1430
1431 The traditional Unix mallocs allow memory to be freed multiple
1432 times; that's probably why this has never been fixed. You can
1433 run configure with the `--without-gnu-malloc' option to use
1434 the C library malloc and avoid the problem.
1435
1436 F4) I'm running SVR4.2. Why is the line erased every time I type `@'?
1437
1438 The `@' character is the default `line kill' character in most
1439 versions of System V, including SVR4.2. You can change this
1440 character to whatever you want using `stty'. For example, to
1441 change the line kill character to control-u, type
1442
1443 stty kill ^U
1444
1445 where the `^' and `U' can be two separate characters.
1446
1447 F5) Why does bash report syntax errors when my C News scripts use a
1448 redirection before a subshell command?
1449
1450 The actual command in question is something like
1451
1452 < file ( command )
1453
1454 According to the grammar given in the POSIX.2 standard, this construct
1455 is, in fact, a syntax error. Redirections may only precede `simple
1456 commands'. A subshell construct such as the above is one of the shell's
1457 `compound commands'. A redirection may only follow a compound command.
1458
1459 This affects the mechanical transformation of commands that use `cat'
1460 to pipe a file into a command (a favorite Useless-Use-Of-Cat topic on
1461 comp.unix.shell). While most commands of the form
1462
1463 cat file | command
1464
1465 can be converted to `< file command', shell control structures such as
1466 loops and subshells require `command < file'.
1467
1468 The file CWRU/sh-redir-hack in the bash-2.05a distribution is an
1469 (unofficial) patch to parse.y that will modify the grammar to
1470 support this construct. It will not apply with `patch'; you must
1471 modify parse.y by hand. Note that if you apply this, you must
1472 recompile with -DREDIRECTION_HACK. This introduces a large
1473 number of reduce/reduce conflicts into the shell grammar.
1474
1475 F6) Why can't I use vi-mode editing on Red Hat Linux 6.1?
1476
1477 The short answer is that Red Hat screwed up.
1478
1479 The long answer is that they shipped an /etc/inputrc that only works
1480 for emacs mode editing, and then screwed all the vi users by setting
1481 INPUTRC to /etc/inputrc in /etc/profile.
1482
1483 The short fix is to do one of the following: remove or rename
1484 /etc/inputrc, set INPUTRC=~/.inputrc in ~/.bashrc (or .bash_profile,
1485 but make sure you export it if you do), remove the assignment to
1486 INPUTRC from /etc/profile, add
1487
1488 set keymap emacs
1489
1490 to the beginning of /etc/inputrc, or bracket the key bindings in
1491 /etc/inputrc with these lines
1492
1493 $if mode=emacs
1494 [...]
1495 $endif
1496
1497 F7) Why do bash-2.05a and bash-2.05b fail to compile `printf.def' on
1498 HP/UX 11.x?
1499
1500 HP/UX's support for long double is imperfect at best.
1501
1502 GCC will support it without problems, but the HP C library functions
1503 like strtold(3) and printf(3) don't actually work with long doubles.
1504 HP implemented a `long_double' type as a 4-element array of 32-bit
1505 ints, and that is what the library functions use. The ANSI C
1506 `long double' type is a 128-bit floating point scalar.
1507
1508 The easiest fix, until HP fixes things up, is to edit the generated
1509 config.h and #undef the HAVE_LONG_DOUBLE line. After doing that,
1510 the compilation should complete successfully.
1511
1512 Section G: How can I get bash to do certain common things?
1513
1514 G1) How can I get bash to read and display eight-bit characters?
1515
1516 This is a process requiring several steps.
1517
1518 First, you must ensure that the `physical' data path is a full eight
1519 bits. For xterms, for example, the `vt100' resources `eightBitInput'
1520 and `eightBitOutput' should be set to `true'.
1521
1522 Once you have set up an eight-bit path, you must tell the kernel and
1523 tty driver to leave the eighth bit of characters alone when processing
1524 keyboard input. Use `stty' to do this:
1525
1526 stty cs8 -istrip -parenb
1527
1528 For old BSD-style systems, you can use
1529
1530 stty pass8
1531
1532 You may also need
1533
1534 stty even odd
1535
1536 Finally, you need to tell readline that you will be inputting and
1537 displaying eight-bit characters. You use readline variables to do
1538 this. These variables can be set in your .inputrc or using the bash
1539 `bind' builtin. Here's an example using `bind':
1540
1541 bash$ bind 'set convert-meta off'
1542 bash$ bind 'set meta-flag on'
1543 bash$ bind 'set output-meta on'
1544
1545 The `set' commands between the single quotes may also be placed
1546 in ~/.inputrc.
1547
1548 G2) How do I write a function `x' to replace builtin command `x', but
1549 still invoke the command from within the function?
1550
1551 This is why the `command' and `builtin' builtins exist. The
1552 `command' builtin executes the command supplied as its first
1553 argument, skipping over any function defined with that name. The
1554 `builtin' builtin executes the builtin command given as its first
1555 argument directly.
1556
1557 For example, to write a function to replace `cd' that writes the
1558 hostname and current directory to an xterm title bar, use
1559 something like the following:
1560
1561 cd()
1562 {
1563 builtin cd "$@" && xtitle "$HOST: $PWD"
1564 }
1565
1566 This could also be written using `command' instead of `builtin';
1567 the version above is marginally more efficient.
1568
1569 G3) How can I find the value of a shell variable whose name is the value
1570 of another shell variable?
1571
1572 Versions of Bash newer than Bash-2.0 support this directly. You can use
1573
1574 ${!var}
1575
1576 For example, the following sequence of commands will echo `z':
1577
1578 var1=var2
1579 var2=z
1580 echo ${!var1}
1581
1582 For sh compatibility, use the `eval' builtin. The important
1583 thing to remember is that `eval' expands the arguments you give
1584 it again, so you need to quote the parts of the arguments that
1585 you want `eval' to act on.
1586
1587 For example, this expression prints the value of the last positional
1588 parameter:
1589
1590 eval echo \"\$\{$#\}\"
1591
1592 The expansion of the quoted portions of this expression will be
1593 deferred until `eval' runs, while the `$#' will be expanded
1594 before `eval' is executed. In versions of bash later than bash-2.0,
1595
1596 echo ${!#}
1597
1598 does the same thing.
1599
1600 This is not the same thing as ksh93 `nameref' variables, though the syntax
1601 is similar. I may add namerefs in a future bash version.
1602
1603 G4) How can I make the bash `time' reserved word print timing output that
1604 looks like the output from my system's /usr/bin/time?
1605
1606 The bash command timing code looks for a variable `TIMEFORMAT' and
1607 uses its value as a format string to decide how to display the
1608 timing statistics.
1609
1610 The value of TIMEFORMAT is a string with `%' escapes expanded in a
1611 fashion similar in spirit to printf(3). The manual page explains
1612 the meanings of the escape sequences in the format string.
1613
1614 If TIMEFORMAT is not set, bash acts as if the following assignment had
1615 been performed:
1616
1617 TIMEFORMAT=$'\nreal\t%3lR\nuser\t%3lU\nsys\t%3lS'
1618
1619 The POSIX.2 default time format (used by `time -p command') is
1620
1621 TIMEFORMAT=$'real %2R\nuser %2U\nsys %2S'
1622
1623 The BSD /usr/bin/time format can be emulated with:
1624
1625 TIMEFORMAT=$'\t%1R real\t%1U user\t%1S sys'
1626
1627 The System V /usr/bin/time format can be emulated with:
1628
1629 TIMEFORMAT=$'\nreal\t%1R\nuser\t%1U\nsys\t%1S'
1630
1631 The ksh format can be emulated with:
1632
1633 TIMEFORMAT=$'\nreal\t%2lR\nuser\t%2lU\nsys\t%2lS'
1634
1635 G5) How do I get the current directory into my prompt?
1636
1637 Bash provides a number of backslash-escape sequences which are expanded
1638 when the prompt string (PS1 or PS2) is displayed. The full list is in
1639 the manual page.
1640
1641 The \w expansion gives the full pathname of the current directory, with
1642 a tilde (`~') substituted for the current value of $HOME. The \W
1643 expansion gives the basename of the current directory. To put the full
1644 pathname of the current directory into the path without any tilde
1645 subsitution, use $PWD. Here are some examples:
1646
1647 PS1='\w$ ' # current directory with tilde
1648 PS1='\W$ ' # basename of current directory
1649 PS1='$PWD$ ' # full pathname of current directory
1650
1651 The single quotes are important in the final example to prevent $PWD from
1652 being expanded when the assignment to PS1 is performed.
1653
1654 G6) How can I rename "*.foo" to "*.bar"?
1655
1656 Use the pattern removal functionality described in D3. The following `for'
1657 loop will do the trick:
1658
1659 for f in *.foo; do
1660 mv $f ${f%foo}bar
1661 done
1662
1663 G7) How can I translate a filename from uppercase to lowercase?
1664
1665 The script examples/functions/lowercase, originally written by John DuBois,
1666 will do the trick. The converse is left as an exercise.
1667
1668 G8) How can I write a filename expansion (globbing) pattern that will match
1669 all files in the current directory except "." and ".."?
1670
1671 You must have set the `extglob' shell option using `shopt -s extglob' to use
1672 this:
1673
1674 echo .!(.|) *
1675
1676 A solution that works without extended globbing is given in the Unix Shell
1677 FAQ, posted periodically to comp.unix.shell.
1678
1679 Section H: Where do I go from here?
1680
1681 H1) How do I report bugs in bash, and where should I look for fixes and
1682 advice?
1683
1684 Use the `bashbug' script to report bugs. It is built and
1685 installed at the same time as bash. It provides a standard
1686 template for reporting a problem and automatically includes
1687 information about your configuration and build environment.
1688
1689 `bashbug' sends its reports to bug-bash@gnu.org, which
1690 is a large mailing list gatewayed to the usenet newsgroup gnu.bash.bug.
1691
1692 Bug fixes, answers to questions, and announcements of new releases
1693 are all posted to gnu.bash.bug. Discussions concerning bash features
1694 and problems also take place there.
1695
1696 To reach the bash maintainers directly, send mail to
1697 bash-maintainers@gnu.org.
1698
1699 H2) What kind of bash documentation is there?
1700
1701 First, look in the doc directory in the bash distribution. It should
1702 contain at least the following files:
1703
1704 bash.1 an extensive, thorough Unix-style manual page
1705 builtins.1 a manual page covering just bash builtin commands
1706 bashref.texi a reference manual in GNU tex`info format
1707 bashref.info an info version of the reference manual
1708 FAQ this file
1709 article.ms text of an article written for The Linux Journal
1710 readline.3 a man page describing readline
1711
1712 Postscript, HTML, and ASCII files created from the above source are
1713 available in the documentation distribution.
1714
1715 There is additional documentation available for anonymous FTP from host
1716 ftp.cwru.edu in the `pub/bash' directory.
1717
1718 Cameron Newham and Bill Rosenblatt have written a book on bash, published
1719 by O'Reilly and Associates. The book is based on Bill Rosenblatt's Korn
1720 Shell book. The title is ``Learning the Bash Shell'', and the ISBN number
1721 is 1-56592-147-X. Look for it in fine bookstores near you. This book
1722 covers bash-1.14, but has an appendix describing some of the new features
1723 in bash-2.0.
1724
1725 A second edition of this book is available, published in January, 1998.
1726 The ISBN number is 1-56592-347-2. Look for it in the same fine bookstores
1727 or on the web.
1728
1729 The GNU Bash Reference Manual has been published as a printed book by
1730 Network Theory Ltd (Paperback, ISBN: 0-9541617-7-7, Feb 2003). It covers
1731 bash-2.0 and is available from most online bookstores (see
1732 http://www.network-theory.co.uk/bash/manual/ for details). The publisher
1733 will donate $1 to the Free Software Foundation for each copy sold.
1734
1735 H3) What's coming in future versions?
1736
1737 These are features I hope to include in a future version of bash.
1738
1739 a better bash debugger (a minimally-tested version is included with bash-2.05b)
1740 associative arrays
1741 co-processes, but with a new-style syntax that looks like function declaration
1742
1743 H4) What's on the bash `wish list' for future versions?
1744
1745 These are features that may or may not appear in a future version of bash.
1746
1747 breaking some of the shell functionality into embeddable libraries
1748 a module system like zsh's, using dynamic loading like builtins
1749 better internationalization using GNU `gettext'
1750 date-stamped command history
1751 a bash programmer's guide with a chapter on creating loadable builtins
1752 a better loadable interface to perl with access to the shell builtins and
1753 variables (contributions gratefully accepted)
1754 ksh93-like `nameref' variables
1755 ksh93-like `+=' variable assignment operator
1756 ksh93-like `xx.yy' variables (including some of the .sh.* variables) and
1757 associated disipline functions
1758 Some of the new ksh93 pattern matching operators, like backreferencing
1759
1760 H5) When will the next release appear?
1761
1762 The next version will appear sometime in 2003. Never make predictions.
1763
1764
1765 This document is Copyright 1995-2003 by Chester Ramey.
1766
1767 Permission is hereby granted, without written agreement and
1768 without license or royalty fees, to use, copy, and distribute
1769 this document for any purpose, provided that the above copyright
1770 notice appears in all copies of this document and that the
1771 contents of this document remain unaltered.