?? faq
字號:
This is the Bash FAQ, version 4.12, for Bash version 4.2.This document contains a set of frequently-asked questions concerningBash, the GNU Bourne-Again Shell. Bash is a freely-available commandinterpreter with advanced features for both interactive use and shellprogramming.Another good source of basic information about shells is the collectionof FAQ articles periodically posted to comp.unix.shell.Questions and comments concerning this document should be sent tochet.ramey@case.edu.This document is available for anonymous FTP with the URLftp://ftp.cwru.edu/pub/bash/FAQThe Bash home page is http://cnswww.cns.cwru.edu/~chet/bash/bashtop.html----------Contents:Section A: The BasicsA1) What is it?A2) What's the latest version?A3) Where can I get it?A4) On what machines will bash run?A5) Will bash run on operating systems other than Unix?A6) How can I build bash with gcc?A7) How can I make bash my login shell?A8) I just changed my login shell to bash, and now I can't FTP into my machine. Why not?A9) What's the `POSIX Shell and Utilities standard'?A10) What is the bash `posix mode'?Section B: The latest versionB1) What's new in version 4.2?B2) Are there any user-visible incompatibilities between bash-4.2 and previous bash versions?Section C: Differences from other Unix shellsC1) How does bash differ from sh, the Bourne shell?C2) How does bash differ from the Korn shell, version ksh88?C3) Which new features in ksh-93 are not in bash, and which are?Section D: Why does bash do some things differently than other Unix shells?D1) Why does bash run a different version of `command' than `which command' says it will?D2) Why doesn't bash treat brace expansions exactly like csh?D3) Why doesn't bash have csh variable modifiers?D4) How can I make my csh aliases work when I convert to bash?D5) How can I pipe standard output and standard error from one command to another, like csh does with `|&'?D6) Now that I've converted from ksh to bash, are there equivalents to ksh features like autoloaded functions and the `whence' command?Section E: Why does bash do certain things the way it does?E1) Why is the bash builtin `test' slightly different from /bin/test?E2) Why does bash sometimes say `Broken pipe'?E3) When I have terminal escape sequences in my prompt, why does bash wrap lines at the wrong column?E4) 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?E5) 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?E6) Why doesn't a while or for loop get suspended when I type ^Z?E7) What about empty for loops in Makefiles?E8) Why does the arithmetic evaluation code complain about `08'?E9) Why does the pattern matching expression [A-Z]* match files beginning with every letter except `z'?E10) Why does `cd //' leave $PWD as `//'?E11) If I resize my xterm while another program is running, why doesn't bash notice the change?E12) Why don't negative offsets in substring expansion work like I expect?E13) Why does filename completion misbehave if a colon appears in the filename?E14) Why does quoting the pattern argument to the regular expression matching conditional operator (=~) cause matching to stop working?E15) Tell me more about the shell compatibility level.Section F: Things to watch out for on certain Unix versionsF1) Why can't I use command line editing in my `cmdtool'?F2) I built bash on Solaris 2. Why do globbing expansions and filename completion chop off the first few characters of each filename?F3) Why does bash dump core after I interrupt username completion or `~user' tilde expansion on a machine running NIS?F4) I'm running SVR4.2. Why is the line erased every time I type `@'?F5) Why does bash report syntax errors when my C News scripts use a redirection before a subshell command?F6) Why can't I use vi-mode editing on Red Hat Linux 6.1?F7) Why do bash-2.05a and bash-2.05b fail to compile `printf.def' on HP/UX 11.x?Section G: How can I get bash to do certain common things?G1) How can I get bash to read and display eight-bit characters?G2) How do I write a function `x' to replace builtin command `x', but still invoke the command from within the function?G3) How can I find the value of a shell variable whose name is the value of another shell variable?G4) How can I make the bash `time' reserved word print timing output that looks like the output from my system's /usr/bin/time?G5) How do I get the current directory into my prompt?G6) How can I rename "*.foo" to "*.bar"?G7) How can I translate a filename from uppercase to lowercase?G8) How can I write a filename expansion (globbing) pattern that will match all files in the current directory except "." and ".."?Section H: Where do I go from here?H1) How do I report bugs in bash, and where should I look for fixes and advice?H2) What kind of bash documentation is there?H3) What's coming in future versions?H4) What's on the bash `wish list'?H5) When will the next release appear?----------Section A: The BasicsA1) What is it?Bash is a Unix command interpreter (shell). It is an implementation ofthe Posix 1003.2 shell standard, and resembles the Korn and System Vshells.Bash contains a number of enhancements over those shells, bothfor interactive use and shell programming. Features gearedtoward interactive use include command line editing, commandhistory, job control, aliases, and prompt expansion. Programmingfeatures include additional variable expansions, shellarithmetic, and a number of variables and options to controlshell behavior.Bash was originally written by Brian Fox of the Free SoftwareFoundation. The current developer and maintainer is Chet Rameyof Case Western Reserve University.A2) What's the latest version?The latest version is 4.2, first made available on 14 February, 2011.A3) Where can I get it?Bash is the GNU project's shell, and so is available from themaster GNU archive site, ftp.gnu.org, and its mirrors. Thelatest version is also available for FTP from ftp.cwru.edu.The following URLs tell how to get version 4.2:ftp://ftp.gnu.org/pub/gnu/bash/bash-4.2.tar.gzftp://ftp.cwru.edu/pub/bash/bash-4.2.tar.gzFormatted versions of the documentation are available with the URLs:ftp://ftp.gnu.org/pub/gnu/bash/bash-doc-4.2.tar.gzftp://ftp.cwru.edu/pub/bash/bash-doc-4.2.tar.gzAny patches for the current version are available with the URL:ftp://ftp.cwru.edu/pub/bash/bash-4.2-patches/A4) On what machines will bash run?Bash has been ported to nearly every version of Unix. All youshould have to do to build it on a machine for which a portexists is to type `configure' and then `make'. The build processwill attempt to discover the version of Unix you have and tailoritself accordingly, using a script created by GNU autoconf.More information appears in the file `INSTALL' in the distribution.The Bash web page (http://cnswww.cns.cwru.edu/~chet/bash/bashtop.html)explains how to obtain binary versions of bash for most of the majorcommercial Unix systems.A5) Will bash run on operating systems other than Unix?Configuration specifics for Unix-like systems such as QNX andLynxOS are included in the distribution. Bash-2.05 and laterversions should compile and run on Minix 2.0 (patches werecontributed), but I don't believe anyone has built bash-2.x onearlier Minix versions yet. Bash has been ported to versions of Windows implementing the Win32programming interface. This includes Windows 95 and Windows NT.The port was done by Cygnus Solutions (now part of Red Hat) as partof their CYGWIN project. For more information about the project, seehttp://www.cygwin.com/.Cygnus originally ported bash-1.14.7, and that port was part of theirearly GNU-Win32 (the original name) releases. Cygnus has also doneports of bash-3.2 and bash-4.0 to the CYGWIN environment, and bothare available as part of their current release.Bash-2.05b and later versions should require no local Cygnus changes tobuild and run under CYGWIN.DJ Delorie has a port of bash-2.x which runs under MS-DOS, as partof the DJGPP project. For more information on the project, seehttp://www.delorie.com/djgpp/I have been told that the original DJGPP port was done by Daisuke Aoyama.Mark Elbrecht <snowball3@bigfoot.com> has sent me notice that bash-2.04is available for DJGPP V2. The files are available as:ftp://ftp.simtel.net/pub/simtelnet/gnu/djgpp/v2gnu/bsh204b.zip binaryftp://ftp.simtel.net/pub/simtelnet/gnu/djgpp/v2gnu/bsh204d.zip documentationftp://ftp.simtel.net/pub/simtelnet/gnu/djgpp/v2gnu/bsh204s.zip sourceMark began to work with bash-2.05, but I don't know the current status.Bash-3.0 compiles and runs with no modifications under Microsoft's Servicesfor Unix (SFU), once known as Interix. I do not anticipate any problemswith building bash-4.2, but will gladly accept any patches that are needed.A6) How can I build bash with gcc? Bash configures to use gcc by default if it is available. Read thefile INSTALL in the distribution for more information.A7) How can I make bash my login shell?Some machines let you use `chsh' to change your login shell. Othersystems use `passwd -s' or `passwd -e'. If one of these works foryou, that's all you need. Note that many systems require the fullpathname to a shell to appear in /etc/shells before you can make ityour login shell. For this, you may need the assistance of yourfriendly local system administrator. If you cannot do this, you can still use bash as your login shell, butyou need to perform some tricks. The basic idea is to add a commandto your login shell's startup file to replace your login shell withbash.For example, if your login shell is csh or tcsh, and you have installedbash in /usr/gnu/bin/bash, add the following line to ~/.login: if ( -f /usr/gnu/bin/bash ) exec /usr/gnu/bin/bash --login(the `--login' tells bash that it is a login shell).It's not a good idea to put this command into ~/.cshrc, because everycsh you run without the `-f' option, even ones started to run csh scripts,reads that file. If you must put the command in ~/.cshrc, use somethinglike if ( $?prompt ) exec /usr/gnu/bin/bash --loginto ensure that bash is exec'd only when the csh is interactive.If your login shell is sh or ksh, you have to do two things.First, create an empty file in your home directory named `.bash_profile'.The existence of this file will prevent the exec'd bash from trying toread ~/.profile, and re-execing itself over and over again. ~/.bash_profileis the first file bash tries to read initialization commands from whenit is invoked as a login shell.Next, add a line similar to the above to ~/.profile: [ -f /usr/gnu/bin/bash ] && [ -x /usr/gnu/bin/bash ] && \ exec /usr/gnu/bin/bash --loginThis will cause login shells to replace themselves with bash running asa login shell. Once you have this working, you can copy your initializationcode from ~/.profile to ~/.bash_profile.I have received word that the recipe supplied above is insufficient formachines running CDE. CDE has a maze of twisty little startup files, allslightly different.If you cannot change your login shell in the password file to bash, youwill have to (apparently) live with CDE using the shell in the passwordfile to run its startup scripts. If you have changed your shell to bash,there is code in the CDE startup files (on Solaris, at least) that attemptsto do the right thing. It is, however, often broken, and may require thatyou use the $BASH_ENV trick described below.`dtterm' claims to use $SHELL as the default program to start, so if youcan change $SHELL in the CDE startup files, you should be able to use bashin your terminal windows.Setting DTSOURCEPROFILE in ~/.dtprofile will cause the `Xsession' programto read your login shell's startup files. You may be able to use bash forthe rest of the CDE programs by setting SHELL to bash in ~/.dtprofile aswell, but I have not tried this.You can use the above `exec' recipe to start bash when not logging in withCDE by testing the value of the DT variable: if [ -n "$DT" ]; then [ -f /usr/gnu/bin/bash ] && exec /usr/gnu/bin/bash --login fiIf CDE starts its shells non-interactively during login, the login shellstartup files (~/.profile, ~/.bash_profile) will not be sourced at login.To get around this problem, append a line similar to the following to your~/.dtprofile: BASH_ENV=${HOME}/.bash_profile ; export BASH_ENVand add the following line to the beginning of ~/.bash_profile:
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -