diff options
Diffstat (limited to 'documentation/FAQ')
-rw-r--r-- | documentation/FAQ | 795 |
1 files changed, 795 insertions, 0 deletions
diff --git a/documentation/FAQ b/documentation/FAQ new file mode 100644 index 0000000..c44bc47 --- /dev/null +++ b/documentation/FAQ @@ -0,0 +1,795 @@ +This is the Bash FAQ, version 1.2, for Bash version 1.14.6. + +This document contains a set of frequently-asked questions concerning +Bash, the GNU Bourne-Again Shell. Bash is a freely-available command +interpreter with advanced features for both interactive use and shell +programming. + +Another good source of basic information about shells is the collection +of FAQ articles periodically posted to comp.unix.shell. + +Questions and comments concerning this document should be set to +chet@po.cwru.edu. + +Contents: +1) What is it? +2) What's the latest version? +3) Where can I get it? +4) What's the `Posix 1003.2 standard'? +5) On what machines will bash run? +6) How does bash differ from sh, the Bourne shell? +7) How does bash differ from the Korn shell? +8) What is the bash `posix mode'? +9) How can I build bash with gcc? +10) Why does bash run a different version of `command' than + `which command' says it will? +11) How can I make my csh aliases work when I convert to bash? +12) Now that I've converted from ksh to bash, are there equivalents to + ksh features like autoloaded functions and the `whence' command? +13) Why is the bash builtin `test' slightly different from /bin/test? +14) Why does bash sometimes say `Broken pipe'? +15) How can I get bash to read and display eight-bit characters? +16) Why can't I use command line editing in my `cmdtool'? +17) How do I write a function `x' to replace builtin command `x', but + still invoke the command from within the function? +18) When I have terminal escape sequences in my prompt, why does bash + wrap lines at the wrong column? +19) I built bash on Solaris 2. Why do globbing expansions and filename + completion chop off the first few characters of each filename? +20) Why doesn't bash treat brace expansions exactly like csh? +21) Why does bash dump core after I interrupt username completion? +22) I'm running SVR4.2. Why is the line erased every time I type `@'? +23) How can I find the value of a shell variable whose name is the value + of another shell variable? +24) If I pipe the output of a command into `read variable', why doesn't + the output show up in $variable when the read command finishes? +25) I just changed my shell to bash, and now I can't FTP into my machine. + Why not? +26) I have a bunch of shell scripts that use backslash-escaped characters + in arguments to `echo'. Bash doesn't interpret these characters. Why + not, and how can I make it understand them? +27) Why doesn't bash have csh variable modifiers? +28) Why does bash report syntax errors when my C News scripts use a + redirection before a subshell command? +29) How do I report bugs in bash, and where should I look for fixes and + advice? +30) What kind of bash documentation is there? +31) What's coming in future versions? +32) What's on the bash `wish list'? +33) When will the next release appear? + +1) What is it? + +Bash is a Unix command interpreter (shell). It is an implementation of +the Posix 1003.2 shell standard, and resembles the Korn and System V +shells. + +Bash contains a number of enhancements over those shells, both +for interactive use and shell programming. Features geared +toward interactive use include command line editing, command +history, job control, aliases, and prompt expansion. Programming +features include additional variable expansions, shell +arithmetic, and a number of variables and options to control +shell behavior. + +Bash was originally written by Brian Fox of the Free Software +Foundation. The current developer and maintainer is Chet Ramey +of Case Western Reserve University. + +2) What's the latest version? + +The latest version is 1.14.6, first made available on December 19, 1995. + +3) Where can I get it? + +Bash is the GNU project's shell, and so is available from the +master GNU archive site, prep.ai.mit.edu, and its mirrors. The +latest version is also available for FTP from slc2.ins.cwru.edu, +the maintainer's machine. The following URLs tell how to get +version 1.14.6: + +ftp://prep.ai.mit.edu/pub/gnu/bash-1.14.6.tar.gz +ftp://slc2.ins.cwru.edu/pub/dist/bash-1.14.6.tar.gz + +4) What's the `Posix 1003.2 standard'? + +POSIX is a name originally coined by Richard Stallman for a +family of open system standards based on UNIX. There are a +number of aspects of UNIX under consideration for +standardization, from the basic system services at the system +call and C library level to applications and tools to system +administration and management. Each area of standardization is +assigned to a working group in the 1003 series. + +The POSIX Shell and Utilities standard has been developed by IEEE +Working Group 1003.2 (POSIX.2). It concentrates on the command +interpreter interface and utility programs commonly executed from +the command line or by other programs. An initial version of the +standard has been approved and published by the IEEE, and work is +currently underway to update it. + +Bash is concerned with the aspects of the shell's behavior +defined by POSIX.2. The shell command language has of course +been standardized, including the basic flow control and program +execution constructs, I/O redirection and pipelining, argument +handling, variable expansion, and quoting. + +The `special' builtins, which must be implemented as part of the +shell to provide the desired functionality, are specified as +being part of the shell; examples of these are `eval' and +`export'. Other utilities appear in the sections of POSIX.2 not +devoted to the shell which are commonly (and in some cases must +be) implemented as builtin commands, such as `read' and `test'. +POSIX.2 also specifies aspects of the shell's interactive +behavior as part of the UPE, including job control and command +line editing. Only vi-style line editing commands have been +standardized; emacs editing commands were left out due to +objections. + +5) On what machines will bash run? + +Bash has been ported to nearly every version of UNIX. All you +should have to do to build it on a machine for which a port +exists is to type `make'. The build process will attempt to +discover the version of UNIX you have and tailor itself +accordingly, using a combination of saved definitions in the file +`machines.h' and a file `sysdefs.h' created by inspecting the +environment for various things. + +More information appears in the file `INSTALL' in the distribution. + +6) How does bash differ from sh, the Bourne shell? + +This is a non-comprehensive list of features that differentiate bash +from the SVR4 shell. The bash manual page explains these completely. + +Things bash has that sh does not: + long invocation options + `!' reserved word to invert pipeline return value + the select compound command + the $(...) form of command substitution + the ${#param} parameter value length operator + expansions to perform substring removal (${p%[%]w}, ${p#[#]w}) + variables: BASH, BASH_VERSION, UID, EUID, REPLY, PPID, PWD, + OLDPWD, SHLVL, RANDOM, SECONDS, LINENO, HISTCMD, + HOSTTYPE, OSTYPE, ENV, MAIL_WARNING, PS3, PS4, + HISTSIZE, HISTFILE, HISTFILESIZE, PROMPT_COMMAND, + FCEDIT, FIGNORE, IGNOREEOF, INPUTRC, HISTCONTROL, + command_oriented_history, allow_null_glob_expansion, + glob_dot_filenames, histchars, nolinks, auto_resume, + HOSTFILE, noclobber, TMOUT, no_exit_on_failed_exec, + cdable_vars + redirections: <>, &>, >| + prompt string special char translation and variable expansion + auto-export of modified values of variables in initial environment + command search finds functions before builtins + bash return builtin will exit a file sourced with `.' + builtins: cd -, exec -, echo -e/-E, export -n/-f/-p/name=value, + pwd -P, read -r, readonly -f, trap -l, ulimit -n/-p/-u, + set -b/-m/-o option/-p/-l/-d/-C/-H/-P, unset -f/-v, + umask -S, type -all/-path/-type, suspend -f, kill -s + bash reads ~/.bashrc for interactive shells, $ENV for non-interactive + bash restricted shell mode is more extensive + bash allows functions and variables with the same name + brace expansion + tilde expansion + arithmetic expansion and `let' builtin + process substitution + aliases and alias/unalias builtins + local variables in functions and `local' builtin + readline and command-line editing + history and history/fc builtins + csh-like history expansion + other new bash builtins: bind, command, builtin, declare/typeset, + dirs, enable, fc, help, history, logout, + popd, pushd + exported functions + filename generation when using output redirection (command >a*) + +Things sh has that bash does not: + uses variable SHACCT to do shell accounting + includes `stop' builtin (bash can use alias stop='kill -s STOP') + `newgrp' builtin + turns on job control if called as `jsh' + ulimit attempts to set both soft & hard limits if -S/-H not given + +New things in the SVR4.2 sh: + internationalization: $LANG, $LC_CTYPE, $LC_MESSAGES, setlocale, etc. + $TIMEOUT (like bash $TMOUT) + new builtins: mldmode, priv + `read' builtin has -r + cannot trap SIGALRM or SIGCHLD + kill -s is present + +Implementation differences: + redirection to/from compound commands causes sh to create a subshell + bash does not allow unbalanced quotes; sh silently inserts them at EOF + bash does not mess with signal 11 + sh sets (euid, egid) to (uid, gid) if -p not supplied and uid < 100 + bash splits only the results of expansions on IFS + sh does not allow MAILCHECK to be unset (?) + +7) How does bash differ from the Korn shell? + +Things bash has or uses that ksh does not: + long invocation options + `!' reserved word + posix mode and posix conformance + command hashing + tilde expansion for assignment statements that look like $PATH + process substitution with named pipes if /dev/fd is not available + variables: BASH, BASH_VERSION, UID, EUID, SHLVL, HISTCMD, HOSTTYPE, + OSTYPE, MAIL_WARNING, HISTFILESIZE, OPTERR, + PROMPT_COMMAND, IGNOREEOF, FIGNORE, INPUTRC, HISTCONTROL, + notify, command_oriented_history, glob_dot_filenames, + allow_null_glob_expansion, histchars, nolinks, HOSTFILE, + noclobber, auto_resume, no_exit_on_failed_exec, cdable_vars + prompt expansion with backslash escapes and command substitution + redirection: &> (stdout and stderr) + more extensive and extensible editing and completion + builtins: bind, builtin, command, declare, dirs, echo -e/-E, enable, + exec -, fc -s, export -n/-f/-p, hash, help, history, + jobs -x, kill -s, local, logout, popd, pushd, + readonly -n/-f/-p, set -o braceexpand/-o histexpand/ + -o interactive-comments/-o notify/-o physical/-o posix/ + -l/-d/-C/-b/-H/-P, suspend, trap -l, type, ulimit -u, + umask -S + $[...] synonym for $((...)) + `!' csh-style history expansion + +Things ksh has or uses that bash does not: + new version of test: [[...]] + ((...)) equivalent to let "..." + time keyword to let pipelines be timed + tracked aliases + $(<file) + one-dimensional arrays and appropriate expansions + variables: ERRNO, FPATH, COLUMNS, LINES, EDITOR, VISUAL + extended pattern matching with egrep-style pattern lists + co-processes (|&, >&p, <&p) + weirdly-scoped functions + typeset +f to list all function names without definitions + text of command history kept in a file, not memory + builtins: alias -x, cd old new, fc -e -, newgrp, print, + read -p/-s/u/var?prompt, set -A/-o gmacs/-o keyword/ + -o bgnice/-o markdirs/-o nolog/-o trackall/-o viraw/-s, + typeset -H/-L/-R/-A/-ft/-fu/-fx/-l/-u/-t, whence + +Implementation differences: + ksh runs last command of a pipeline in parent shell context + ksh ulimit sets hard and soft limits by default + bash has brace expansion by default + bash has fixed startup file for all interactive shells; ksh reads $ENV + bash has exported functions + bash command search finds functions before builtins + +8) What is the bash `posix mode'? + +Although bash is an implementation of the Posix.2 shell +specification, there are areas where the bash default behavior +differs from that spec. The bash `posix mode' changes the bash +behavior in these areas so that it obeys the spec more closely. + +Posix mode is entered by starting bash with the -posix option or +executing `set -o posix' after bash is running. + +The specific aspects of bash which change when posix mode is +active are listed in the file CWRU/POSIX.NOTES in the bash +distribution. + +9) How can I build bash with gcc? + +Type + make CC=gcc CPPNAME='$(CC) -E' + +10) Why does bash run a different version of `command' than + `which command' says it will? + +`which' is actually a csh script that assumes you're running csh. +It reads the csh startup files from your home directory and uses +those to determine which `command' will be invoked. Since bash +doesn't use any of those startup files, there's a good chance +that your bash environment differs from your csh environment. + +11) How can I make my csh aliases work when I convert to bash? + +Bash uses a different syntax to support aliases than csh does. +The details can be found in the documentation. We have provided +a shell script which does most of the work of conversion for you; +this script can be found in ./examples/alias-conv.sh. Here is +how you use it: + +Start csh in the normal way for you. (e.g., `csh') + +Pipe the output of `alias' through `alias-conv.sh', saving the +results into `bash_aliases': + + alias | alias-conv.sh >bash_aliases + +Edit `bash_aliases', carefully reading through any created +functions. You will need to change the names of csh specific +variables (like $cwd) to the bash equivalents (like $PWD). You +will also need to remove recursive references to commands which +are defined as functions. For example, the csh alias: + + alias cd 'cd \!*;echo $cwd' + +is converted to the bash function: + + cd () + { + cd $*; + echo $cwd + } + +This function contains a self-pointing reference to `cd', which +should be changed to use the `builtin' version. It also uses +the csh variable `$cwd' which has an equivalent in bash. +Precede the recursive reference with the word `builtin', and +change the name of the variable: + + cd () { builtin cd $*; echo $PWD; } + +Merge the edited file into your ~/.bashrc. + +12) Now that I've converted from ksh to bash, are there equivalents to + ksh features like autoloaded functions and the `whence' command? + +There are features in ksh-88 that do not have direct bash equivalents. +Most, however, can be emulated with very little trouble. + +ksh-88 feature Bash equivalent +-------------- --------------- +[[...]] can usually use [...]; minor differences +compiled-in aliases set up aliases in .bashrc; some ksh aliases are + bash builtins (hash, history, type) +$(<file) $(cat file) +arrays no good subsitute yet +((...)) let "..." +time use external command; GNU time is particularly useful + use time bash -c '...' for complicated constructs +extended patterns no good substitute +coprocesses named pipe pairs (one for read, one for write) +typeset +f declare -f | + sed -n 's:^declare -[a-z]* \([^ ]*\).*$:\1:p' +cd, print, whence function subsitutes in examples/functions/kshenv +autoloaded functions examples/functions/autoload is the same as typeset -fu +read var?prompt [ -t 0 ] && echo -n prompt >&2; read var + +13) Why is the bash builtin `test' slightly different from /bin/test? + +The specific example used here is [ ! x -o x ], which is false. + +Bash's builtin `test' implements the Posix.2 spec, which can be +summarized as follows (the wording is due to David Korn): + +Here is the set of rules for processing test arguments. + + 0 Args: False + 1 Arg: True iff argument is not null. + 2 Args: If first arg is !, True iff second argument is null. + If first argument is unary, then true if unary test is true + Otherwise error. + 3 Args: If second argument is a binary operator, do binary test of $1 $3 + If first argument is !, negate two argument test of $2 $3 + Otherwise error. + 4 Args: If first argument is !, negate three argument test of $2 $3 $4. + Otherwise unspecified + 5 or more Args: unspecified. (Historical shells would use their + current algorithm). + +The operators -a and -o are considered binary operators for the purpose +of the 3 Arg case. + +As you can see, the test becomes (not (x or x)), which is false. + +14) Why does bash sometimes say `Broken pipe'? + +If a sequence of commands appear in a pipeline, and one of the +reading commands finishes before the writer has finished, the +writer receives a SIGPIPE signal. Many other shells special-case +SIGPIPE as an exit status in the pipeline and do not report it. +For example, in: + + ps -aux | head + +`head' can finish before `ps' writes all of its output, and ps +will try to write on a pipe without a reader. In that case, bash +will print `Broken pipe' to stderr when ps is killed by a +SIGPIPE. + +15) How can I get bash to read and display eight-bit characters? + +This is a process requiring several steps. + +First, you must ensure that the `physical' data path is a full eight +bits. For xterms, for example, the `vt100' resources `eightBitInput' +and `eightBitOutput' should be set to `true'. + +Once you have set up an eight-bit path, you must tell the kernel and +tty driver to leave the eigth bit of characters alone when processing +keyboard input. Use `stty' to do this: + + stty cs8 -istrip -parenb + +For old BSD-style systems, you can use + + stty pass8 + +You may also need + + stty even odd + +Finally, you need to tell readline that you will be inputting and +displaying eight-bit characters. You use readline variables to do +this. These variables can be set in your .inputrc or using the bash +`bind' builtin. Here's an example using `bind': + + bash$ bind 'set convert-meta off' + bash$ bind 'set meta-flag on' + bash$ bind 'set output-meta on' + +The `set' commands between the single quotes may also be placed +in ~/.inputrc. + +16) Why can't I use command line editing in my `cmdtool'? + +The problem is `cmdtool' and bash fighting over the input. When +scrolling is enabled in a cmdtool window, cmdtool puts the tty in +`raw mode' to permit command-line editing using the mouse for +applications that cannot do it themselves. As a result, bash and +cmdtool each try to read keyboard input immediately, with neither +getting enough of it to be useful. + +This mode also causes cmdtool to not implement many of the +terminal functions and control sequences appearing in the +`sun-cmd' termcap entry. For a more complete explanation, see +that file examples/suncmd.termcap in the bash distribution. + +`xterm' is a better choice, and gets along with bash much more +smoothly. + +17) How do I write a function `x' to replace builtin command `x', but + still invoke the command from within the function? + +This is what the `command' and `builtin' builtins are for. The +`command' builtin executes the command supplied as its first +argument, skipping over any function defined with that name. The +`builtin' builtin executes the builtin command given as its first +argument directly. + +For example, to write a function to replace `cd' that writes the +hostname and current directory to an xterm title bar, use +something like the following: + + cd() + { + builtin cd "$@" && xtitle $HOST: $PWD + } + +This could also be written using `command' instead of `builtin'; +the version above is marginally more efficient. + +18) When I have terminal escape sequences in my prompt, why does bash + wrap lines at the wrong column? + +Bash does not know that the terminal escape sequences do not take +up space on the screen. The redisplay code assumes, unless told +otherwise, that each character in the prompt is a `printable' +character that takes up one character position on the screen. + +You can use the bash prompt expansion facility (see the PROMPTING +section in the manual page) to tell readline that sequences of +characters in the prompt strings take up no screen space. + +Use the \[ escape to begin a sequence of non-printing characters, +and the \] escape to signal the end of such a sequence. + +19) I built bash on Solaris 2. Why do globbing expansions and filename + completion chop off the first few characters of each filename? + +This is the consequence of building bash on SunOS 5 and linking +with the libraries in /usr/ucblib, but using the definitions +and strutures from files in /usr/include. + +The actual conflict is between the dirent structure in +/usr/include/dirent.h and the struct returned by the version of +`readdir' in libucb.a (a 4.3-BSD style `struct direct'). + +Make sure you've got /usr/ccs/bin ahead of /usr/ucb in your $PATH +when building bash. This will ensure that you use /usr/ccs/bin/cc +or acc instead of /usr/ucb/cc and that you link with libc before +libucb. + +If you have installed the Sun C compiler, you may also need to +put /usr/ccs/bin and /opt/SUNWspro/bin into your $PATH before +/usr/ucb. + +20) Why doesn't bash treat brace expansions exactly like csh? + +The only difference between bash and csh brace expansion is that +bash requires a brace expression to contain at least on unquoted +comma if it is to be expanded. Any brace-surrounded word not +containing an unquoted comma is left unchanged by the brace +expansion code. This affords the greatest degree of sh +compatibility. + +Bash, ksh, zsh, and pd-ksh all implement brace expansion this way. + +21) Why does bash dump core after I interrupt username completion on a + machine running NIS? + +This is a famous and long-standing bug in the SunOS YP (sorry, NIS) +client library, which is part of libc. + +The YP library code keeps static state -- a pointer into the data +returned from the server. When YP initializes itself (setpwent), +it looks at this pointer and calls free on it if it's non-null. +So far, so good. + +If one of the YP functions is interrupted during getpwent (the +exact function is interpretwithsave()), and returns NULL, the +pointer is freed without being reset to NULL, and the function +returns. The next time getpwent is called, it sees that this +pointer is non-null, calls free, and the bash free() blows up +because it's being asked to free freed memory. + +The traditional Unix mallocs allow memory to be freed multiple +times; that's probably why this has never been fixed. You can +probably stop it by adding an #undef USE_GNU_MALLOC to the +appropriate machine description in machines.h. + +22) I'm running SVR4.2. Why is the line erased every time I type `@'? + +The `@' character is the default `line kill' character in most +versions of System V, including SVR4.2. You can change this +character to whatever you want using `stty'. For example, to +change the line kill character to control-u, type + + stty kill ^U + +where the `^' and `U' can be two separate characters. + +23) How can I find the value of a shell variable whose name is the value + of another shell variable? + +Use the `eval' builtin. The important thing to remember is that +`eval' expands the arguments you give it again, so you need to +quote the parts of the arguments that you want `eval' to act on. + +For example, this expression prints the value of the last positional +parameter: + + eval echo \$\{$#\} + +The expansion of the quoted portions of this expression will be +deferred until `eval' runs, while the `$#' will be expanded +before `eval' is executed. + +24) If I pipe the output of a command into `read variable', why doesn't + the output show up in $variable when the read command finishes? + +This has to do with the parent-child relationship between Unix +processes. + +Each element of a pipeline runs in a separate process, a child of +the shell running the pipeline. A subprocess cannot affect its +parent's environment. When the `read' command sets the variable +to the input, that variable is set only in the subshell, not the +parent shell. When the subshell exits, the value of the variable +is lost. + +Many pipelines that end with `read variable' can be converted +into command substitutions, which will capture the output into a +variable: + + grep ^gnu /usr/lib/news/active | wc -l | read ngroup + +can be converted into + + ngroup=$(grep ^gnu /usr/lib/news/active | wc -l) + +This does not, unfortunately, work to split the text among +multiple variables, as read does when given multiple variable +arguments. + +25) I just changed my shell to bash, and now I can't FTP into my machine. + Why not? + +You must add the full pathname to bash to the file /etc/shells. +Many versions of ftpd use this file to prohibit `special' users +such as `uucp' and `news' from using FTP. + +26) I have a bunch of shell scripts that use backslash-escaped characters + in arguments to `echo'. Bash doesn't interpret these characters. Why + not, and how can I make it understand them? + +This is the behavior of echo on most Unix System V machines. + +The bash builtin `echo' is modelled after the 9th Edition +Research Unix version of `echo'. It does not interpret +backslash-escaped characters in its argument strings by default, +but requires the use of the -e option to enable the +interpretation. The System V echo provides no way to disable the +special characters; the bash echo has a -E option to disable +them. + +There is a compile-time option that will make bash behave like +the System V echo and interpret things like \t by default. +Change config.h so that DEFAULT_ECHO_TO_USG is defined, remove +builtins/libbuiltins.a and builtins/echo.o, and rebuild. + +27) Why doesn't bash have csh variable modifiers? + +Posix has specified a more powerful, albeit somewhat more confusing, +mechanism cribbed from ksh, and bash implements it. + +${parameter%word} + Remove smallest suffix pattern. The WORD is expanded to produce + a pattern. It then expands to the value of PARAMETER, with the + smallest portion of the suffix matched by the pattern deleted. + + x=file.c + echo ${x%.c}.o + -->file.o + +${parameter%%word} + + Remove largest suffix pattern. The WORD is expanded to produce + a pattern. It then expands to the value of PARAMETER, with the + largest portion of the suffix matched by the pattern deleted. + + x=posix/src/std + echo ${x%%/*} + -->posix + +${parameter#word} + Remove smallest prefix pattern. The WORD is expanded to produce + a pattern. It then expands to the value of PARAMETER, with the + smallest portion of the prefix matched by the pattern deleted. + + x=$HOME/src/cmd + echo ${x#$HOME} + -->/src/cmd + +${parameter##word} + Remove largest prefix pattern. The WORD is expanded to produce + a pattern. It then expands to the value of PARAMETER, with the + largest portion of the prefix matched by the pattern deleted. + + x=/one/two/three + echo ${x##*/} + -->three + + +Given + a=/a/b/c/d + b=b.xxx + + csh bash result + --- ---- ------ + $a:h ${a%/*} /a/b/c + $a:t ${a##*/} d + $b:r ${b%.*} b + $b:e ${b##*.} xxx + + +28) Why does bash report syntax errors when my C News scripts use a + redirection before a subshell command? + +The actual command in question is something like + + < file ( command ) + +According to the grammar given in the Posix.2 standard, this construct +is, in fact, a syntax error. Redirections may only precede `simple +commands'. A subshell construct such as the above is one of the shell's +`compound commands'. A redirection may only follow a compound command. + +The file CWRU/sh-redir-hack in the 1.14.6 distribution is an (unofficial) +patch to parse.y that will modify the grammar to support this construct. +Note that if you apply this, you must recompile with -DREDIRECTION_HACK. +This introduces a large number of reduce/reduce conflicts into the shell +grammar. + +29) How do I report bugs in bash, and where should I look for fixes and + advice? + +Use the `bashbug' script to report bugs. It is built and +installed at the same time as bash. It provides a standard +template for reporting a problem and automatically includes +information about your configuration and build environment. + +`bashbug' sends its reports to bug-bash@prep.ai.mit.edu, which +is a large mailing list gatewayed to the usenet newsgroup gnu.bash.bug. + +Bug fixes, answers to questions, and announcements of new releases +are all posted to gnu.bash.bug. Discussions concerning bash features +and problems also take place there. + +To reach the bash maintainers directly, send mail to +bash-maintainers@prep.ai.mit.edu. + +30) What kind of bash documentation is there? + +First, look in the documentation directory in the bash distribution. +It should contain the following files: + +bash.1 an extensive, thorough Unix-style manual page +builtins.1 a manual page covering just bash builtin commands +features.texi a Gnu-style info file overview +FAQ this file +article.ms text of an article written for The Linux Journal +readline.3 a man page describing readline + +Postscript files created from the above source are also present in +the distribution. + +There is additional documentation available for anonymous FTP from host +slc2.ins.cwru.edu in the `pub/bash' directory. + +Cameron Newham is in the midst of writing a book on bash, to be +published by O'Reilly and Associates. Look for it sometime this +year. + +31) What's coming in future versions? + +There will be no new features in future releases of version 1.14. + +The next major release, bash-2.0, will contain extensive changes and new +features. Here's a short list: + +one-dimensional arrays with a new compound assignment statement, + appropriate expansion constructs and modifications to some + of the builtins (read, declare, etc.) to use them +new expansions to do ANSI-C string expansion, substring extraction, + pattern replacement, and indirect variable expansion +new builtins: `disown' and `shopt' +new variables: HISTIGNORE, SHELLOPTS, PIPESTATUS, DIRSTACK +special handling of many unused or redundant variables removed +dynamic loading of new builtin commands; many loadable examples provided +new prompt expansions: \e, \n, \H, \T +new readline variables: enable-keypad, mark-directories, input-meta +new readline commands to manipulate the mark and operate on the region +new readline emacs mode commands and bindings for ksh-88 compatibility +updated and extended builtins +new DEBUG trap +expanded (and now documented) restricted shell mode + +implementation stuff: +autoconf-based configuration +nearly all of the bugs reported since version 1.14 have been fixed +most builtins converted to use builtin `getopt' for consistency +most builtins use -p option to display output in a reusable form + (for consistency) +grammar tighter and smaller (66 reduce-reduce conflicts gone) +lots of code now smaller and faster +test suite greatly expanded + +32) What's on the bash `wish list'? + +internationalization with a variable expansion to translate a string + according to a particular message catalog +Programmable completion a la zsh +menu completion a la tcsh +the ksh egrep-style extended pattern matching operators +associative arrays (not really all that hard) +breaking some of the shell functionality into embeddable libraries +a bash debugger + +Much of this will not be in bash-2.0. + +33) When will the next release appear? + +Version 1.14.6 will probably be the last release for version 1.14. + +The next version will appear sometime in 1996. Never make predictions. + + +This document is copyright Chester Ramey, 1995. + +Permission is hereby granted, without written agreement and +without license or royalty fees, to use, copy, and distribute +this document for any purpose, provided that the above copyright +notice appears in all copies of this document and that the +contents of this document remain unaltered. |