blob: 6c57b876a905834f4be22f109dd986456760c1ea [file] [log] [blame]
Jari Aalto95732b42005-12-07 14:08:12 +000016.11 Bash POSIX Mode
2====================
Jari Aalto726f6381996-08-26 18:22:31 +00003
Jari Aaltoccc6cda1996-12-23 17:02:34 +00004Starting Bash with the `--posix' command-line option or executing `set
5-o posix' while Bash is running will cause Bash to conform more closely
Jari Aalto06285672006-10-10 14:15:34 +00006to the POSIX standard by changing the behavior to match that specified
7by POSIX in areas where the Bash default differs.
Jari Aalto726f6381996-08-26 18:22:31 +00008
Jari Aalto7117c2d2002-07-17 14:10:11 +00009When invoked as `sh', Bash enters POSIX mode after reading the startup
10files.
11
Jari Aaltoccc6cda1996-12-23 17:02:34 +000012The following list is what's changed when `POSIX mode' is in effect:
Jari Aalto726f6381996-08-26 18:22:31 +000013
Jari Aaltoccc6cda1996-12-23 17:02:34 +000014 1. When a command in the hash table no longer exists, Bash will
15 re-search `$PATH' to find the new location. This is also
16 available with `shopt -s checkhash'.
Jari Aalto726f6381996-08-26 18:22:31 +000017
Jari Aalto28ef6c32001-04-06 19:14:31 +000018 2. The message printed by the job control code and builtins when a job
19 exits with a non-zero status is `Done(status)'.
Jari Aalto726f6381996-08-26 18:22:31 +000020
Jari Aaltoccc6cda1996-12-23 17:02:34 +000021 3. The message printed by the job control code and builtins when a job
Jari Aalto28ef6c32001-04-06 19:14:31 +000022 is stopped is `Stopped(SIGNAME)', where SIGNAME is, for example,
23 `SIGTSTP'.
Jari Aalto726f6381996-08-26 18:22:31 +000024
Jari Aalto95732b42005-12-07 14:08:12 +000025 4. The `bg' builtin uses the required format to describe each job
26 placed in the background, which does not include an indication of
27 whether the job is the current or previous job.
Jari Aalto726f6381996-08-26 18:22:31 +000028
Jari Aalto95732b42005-12-07 14:08:12 +000029 5. Reserved words appearing in a context where reserved words are
30 recognized do not undergo alias expansion.
31
Jari Aalto06285672006-10-10 14:15:34 +000032 6. The POSIX `PS1' and `PS2' expansions of `!' to the history number
33 and `!!' to `!' are enabled, and parameter expansion is performed
34 on the values of `PS1' and `PS2' regardless of the setting of the
35 `promptvars' option.
Jari Aalto726f6381996-08-26 18:22:31 +000036
Jari Aalto06285672006-10-10 14:15:34 +000037 7. The POSIX startup files are executed (`$ENV') rather than the
38 normal Bash files.
Jari Aalto726f6381996-08-26 18:22:31 +000039
Jari Aalto95732b42005-12-07 14:08:12 +000040 8. Tilde expansion is only performed on assignments preceding a
Jari Aaltoccc6cda1996-12-23 17:02:34 +000041 command name, rather than on all assignment statements on the line.
Jari Aalto726f6381996-08-26 18:22:31 +000042
Jari Aalto95732b42005-12-07 14:08:12 +000043 9. The default history file is `~/.sh_history' (this is the default
Jari Aaltoccc6cda1996-12-23 17:02:34 +000044 value of `$HISTFILE').
Jari Aalto726f6381996-08-26 18:22:31 +000045
Jari Aalto95732b42005-12-07 14:08:12 +000046 10. The output of `kill -l' prints all the signal names on a single
Jari Aaltob80f6442004-07-27 13:29:18 +000047 line, separated by spaces, without the `SIG' prefix.
48
Jari Aalto95732b42005-12-07 14:08:12 +000049 11. The `kill' builtin does not accept signal names with a `SIG'
Jari Aaltob80f6442004-07-27 13:29:18 +000050 prefix.
Jari Aalto726f6381996-08-26 18:22:31 +000051
Jari Aalto95732b42005-12-07 14:08:12 +000052 12. Non-interactive shells exit if FILENAME in `.' FILENAME is not
Jari Aaltoccc6cda1996-12-23 17:02:34 +000053 found.
Jari Aalto726f6381996-08-26 18:22:31 +000054
Jari Aalto95732b42005-12-07 14:08:12 +000055 13. Non-interactive shells exit if a syntax error in an arithmetic
Jari Aaltocce855b1998-04-17 19:52:44 +000056 expansion results in an invalid expression.
57
Jari Aalto95732b42005-12-07 14:08:12 +000058 14. Redirection operators do not perform filename expansion on the word
Jari Aaltoccc6cda1996-12-23 17:02:34 +000059 in the redirection unless the shell is interactive.
Jari Aalto726f6381996-08-26 18:22:31 +000060
Jari Aalto95732b42005-12-07 14:08:12 +000061 15. Redirection operators do not perform word splitting on the word in
Jari Aaltobb706242000-03-17 21:46:59 +000062 the redirection.
63
Jari Aalto95732b42005-12-07 14:08:12 +000064 16. Function names must be valid shell `name's. That is, they may not
Jari Aaltoccc6cda1996-12-23 17:02:34 +000065 contain characters other than letters, digits, and underscores, and
Jari Aaltocce855b1998-04-17 19:52:44 +000066 may not start with a digit. Declaring a function with an invalid
Jari Aaltoccc6cda1996-12-23 17:02:34 +000067 name causes a fatal syntax error in non-interactive shells.
Jari Aalto726f6381996-08-26 18:22:31 +000068
Jari Aalto06285672006-10-10 14:15:34 +000069 17. POSIX special builtins are found before shell functions during
70 command lookup.
Jari Aalto726f6381996-08-26 18:22:31 +000071
Jari Aalto06285672006-10-10 14:15:34 +000072 18. If a POSIX special builtin returns an error status, a
Jari Aaltoccc6cda1996-12-23 17:02:34 +000073 non-interactive shell exits. The fatal errors are those listed in
Jari Aalto06285672006-10-10 14:15:34 +000074 the POSIX standard, and include things like passing incorrect
Jari Aaltoccc6cda1996-12-23 17:02:34 +000075 options, redirection errors, variable assignment errors for
76 assignments preceding the command name, and so on.
Jari Aalto726f6381996-08-26 18:22:31 +000077
Jari Aalto28ef6c32001-04-06 19:14:31 +000078 19. If `CDPATH' is set, the `cd' builtin will not implicitly append
Jari Aaltocce855b1998-04-17 19:52:44 +000079 the current directory to it. This means that `cd' will fail if no
80 valid directory name can be constructed from any of the entries in
81 `$CDPATH', even if the a directory with the same name as the name
82 given as an argument to `cd' exists in the current directory.
83
Jari Aaltobb706242000-03-17 21:46:59 +000084 20. A non-interactive shell exits with an error status if a variable
Jari Aaltoccc6cda1996-12-23 17:02:34 +000085 assignment error occurs when no command name follows the assignment
86 statements. A variable assignment error occurs, for example, when
Jari Aaltocce855b1998-04-17 19:52:44 +000087 trying to assign a value to a readonly variable.
Jari Aalto726f6381996-08-26 18:22:31 +000088
Jari Aaltobb706242000-03-17 21:46:59 +000089 21. A non-interactive shell exits with an error status if the iteration
Jari Aaltoccc6cda1996-12-23 17:02:34 +000090 variable in a `for' statement or the selection variable in a
Jari Aaltocce855b1998-04-17 19:52:44 +000091 `select' statement is a readonly variable.
Jari Aaltoccc6cda1996-12-23 17:02:34 +000092
Jari Aaltobb706242000-03-17 21:46:59 +000093 22. Process substitution is not available.
Jari Aaltoccc6cda1996-12-23 17:02:34 +000094
Jari Aalto06285672006-10-10 14:15:34 +000095 23. Assignment statements preceding POSIX special builtins persist in
96 the shell environment after the builtin completes.
Jari Aaltoccc6cda1996-12-23 17:02:34 +000097
Jari Aalto28ef6c32001-04-06 19:14:31 +000098 24. Assignment statements preceding shell function calls persist in the
99 shell environment after the function returns, as if a POSIX
100 special builtin command had been executed.
101
102 25. The `export' and `readonly' builtin commands display their output
Jari Aalto06285672006-10-10 14:15:34 +0000103 in the format required by POSIX.
Jari Aaltod166f041997-06-05 14:59:13 +0000104
Jari Aalto28ef6c32001-04-06 19:14:31 +0000105 26. The `trap' builtin displays signal names without the leading `SIG'.
106
Jari Aaltob80f6442004-07-27 13:29:18 +0000107 27. The `trap' builtin doesn't check the first argument for a possible
108 signal specification and revert the signal handling to the original
Jari Aalto95732b42005-12-07 14:08:12 +0000109 disposition if it is, unless that argument consists solely of
110 digits and is a valid signal number. If users want to reset the
111 handler for a given signal to the original disposition, they
112 should use `-' as the first argument.
Jari Aaltob80f6442004-07-27 13:29:18 +0000113
114 28. The `.' and `source' builtins do not search the current directory
Jari Aalto28ef6c32001-04-06 19:14:31 +0000115 for the filename argument if it is not found by searching `PATH'.
116
Jari Aaltob80f6442004-07-27 13:29:18 +0000117 29. Subshells spawned to execute command substitutions inherit the
Jari Aalto28ef6c32001-04-06 19:14:31 +0000118 value of the `-e' option from the parent shell. When not in POSIX
119 mode, Bash clears the `-e' option in such subshells.
120
Jari Aaltob80f6442004-07-27 13:29:18 +0000121 30. Alias expansion is always enabled, even in non-interactive shells.
Jari Aalto28ef6c32001-04-06 19:14:31 +0000122
Jari Aaltob80f6442004-07-27 13:29:18 +0000123 31. When the `alias' builtin displays alias definitions, it does not
124 display them with a leading `alias ' unless the `-p' option is
125 supplied.
126
127 32. When the `set' builtin is invoked without options, it does not
Jari Aalto28ef6c32001-04-06 19:14:31 +0000128 display shell function names and definitions.
129
Jari Aaltob80f6442004-07-27 13:29:18 +0000130 33. When the `set' builtin is invoked without options, it displays
Jari Aalto7117c2d2002-07-17 14:10:11 +0000131 variable values without quotes, unless they contain shell
132 metacharacters, even if the result contains nonprinting characters.
133
Jari Aaltob80f6442004-07-27 13:29:18 +0000134 34. When the `cd' builtin is invoked in LOGICAL mode, and the pathname
Jari Aalto7117c2d2002-07-17 14:10:11 +0000135 constructed from `$PWD' and the directory name supplied as an
136 argument does not refer to an existing directory, `cd' will fail
137 instead of falling back to PHYSICAL mode.
Jari Aaltoccc6cda1996-12-23 17:02:34 +0000138
Jari Aalto95732b42005-12-07 14:08:12 +0000139 35. When the `pwd' builtin is supplied the `-P' option, it resets
140 `$PWD' to a pathname containing no symlinks.
Jari Aaltoccc6cda1996-12-23 17:02:34 +0000141
Jari Aalto95732b42005-12-07 14:08:12 +0000142 36. The `pwd' builtin verifies that the value it prints is the same as
143 the current directory, even if it is not asked to check the file
144 system with the `-P' option.
Jari Aaltoccc6cda1996-12-23 17:02:34 +0000145
Jari Aalto95732b42005-12-07 14:08:12 +0000146 37. When listing the history, the `fc' builtin does not include an
147 indication of whether or not a history entry has been modified.
Jari Aalto28ef6c32001-04-06 19:14:31 +0000148
Jari Aalto95732b42005-12-07 14:08:12 +0000149 38. The default editor used by `fc' is `ed'.
Jari Aalto28ef6c32001-04-06 19:14:31 +0000150
Jari Aalto95732b42005-12-07 14:08:12 +0000151 39. The `type' and `command' builtins will not report a non-executable
152 file as having been found, though the shell will attempt to
153 execute such a file if it is the only so-named file found in
154 `$PATH'.
155
156 40. The `vi' editing mode will invoke the `vi' editor directly when
Jari Aalto31859422009-01-12 13:36:28 +0000157 the `v' command is run, instead of checking `$VISUAL' and
Jari Aalto95732b42005-12-07 14:08:12 +0000158 `$EDITOR'.
159
160 41. When the `xpg_echo' option is enabled, Bash does not attempt to
161 interpret any arguments to `echo' as options. Each argument is
162 displayed, after escape characters are converted.
163
Jari Aalto31859422009-01-12 13:36:28 +0000164 42. The `ulimit' builtin uses a block size of 512 bytes for the `-c'
165 and `-f' options.
166
Chet Ramey00018032011-11-21 20:51:19 -0500167 43. The arrival of `SIGCHLD' when a trap is set on `SIGCHLD' does not
168 interrupt the `wait' builtin and cause it to return immediately.
169 The trap command is run once for each child that exits.
170
Jari Aalto95732b42005-12-07 14:08:12 +0000171
Jari Aalto06285672006-10-10 14:15:34 +0000172There is other POSIX behavior that Bash does not implement by default
173even when in POSIX mode. Specifically:
Jari Aalto95732b42005-12-07 14:08:12 +0000174
175 1. The `fc' builtin checks `$EDITOR' as a program to edit history
176 entries if `FCEDIT' is unset, rather than defaulting directly to
177 `ed'. `fc' uses `ed' if `EDITOR' is unset.
178
179 2. As noted above, Bash requires the `xpg_echo' option to be enabled
180 for the `echo' builtin to be fully conformant.
181
182
183Bash can be configured to be POSIX-conformant by default, by specifying
184the `--enable-strict-posix-default' to `configure' when building (*note
185Optional Features::).
Jari Aalto28ef6c32001-04-06 19:14:31 +0000186