mirror of
https://https.git.savannah.gnu.org/git/bash.git
synced 2026-06-22 05:17:59 +02:00
83 lines
3.5 KiB
Plaintext
83 lines
3.5 KiB
Plaintext
Starting bash with the `--posix' command-line option or executing
|
|
`set -o posix' while bash is running will cause bash to conform more
|
|
closely to the Posix.2 standard by changing the behavior to match that
|
|
specified by Posix.2 in areas where the bash default differs.
|
|
|
|
The following list is what's changed when `posix mode' is in effect:
|
|
|
|
1. When a command in the hash table no longer exists, bash will re-search
|
|
$PATH to find the new location. This is also available with
|
|
`shopt -s checkhash'.
|
|
|
|
2. The >& redirection does not redirect stdout and stderr.
|
|
|
|
3. The message printed by the job control code and builtins when a job
|
|
exits with a non-zero status is `Done(status)'.
|
|
|
|
4. Reserved words may not be aliased.
|
|
|
|
5. The Posix.2 PS1 and PS2 expansions of `!' -> history number and
|
|
`!!' -> `!' are enabled, and parameter expansion is performed on
|
|
the value regardless of the setting of the `promptvars' option.
|
|
|
|
6. Interactive comments are enabled by default. (Note that bash has
|
|
them on by default anyway.)
|
|
|
|
7. The Posix.2 startup files are executed ($ENV) rather than the normal
|
|
bash files.
|
|
|
|
8. Tilde expansion is only performed on assignments preceding a command
|
|
name, rather than on all assignment statements on the line.
|
|
|
|
9. The default history file is ~/.sh_history (default value of $HISTFILE).
|
|
|
|
10. The output of `kill -l' prints all the signal names on a single line,
|
|
separated by spaces.
|
|
|
|
11. Non-interactive shells exit if `file' in `. file' is not found.
|
|
|
|
12. Redirection operators do not perform pathname expansion on the word
|
|
in the redirection unless the shell is interactive
|
|
|
|
13. Function names must be valid shell identifiers. That is, they may not
|
|
contain characters other than letters, digits, and underscores, and
|
|
may not start with a digit. Declaring a function with an illegal name
|
|
causes a fatal syntax error in non-interactive shells.
|
|
|
|
14. Posix.2 `special' builtins are found before shell functions during command
|
|
lookup.
|
|
|
|
15. If a Posix.2 special builtin returns an error status, a non-interactive
|
|
shell exits. The fatal errors are those listed in the POSIX.2 standard,
|
|
and include things like passing incorrect options, redirection errors,
|
|
variable assignment errors for assignments preceding the command name,
|
|
and so on.
|
|
|
|
16. The environment passed to executed commands is not sorted. Neither is
|
|
the output of `set'. This is not strictly Posix.2 behavior, but sh
|
|
does it this way. Ksh does not. It's not necessary to sort the
|
|
environment; no program should rely on it being sorted.
|
|
|
|
17. If the `cd' builtin finds a directory to change to using $CDPATH, the
|
|
value it assigns to $PWD does not contain any symbolic links, as if
|
|
`cd -P' had been executed.
|
|
|
|
18. A non-interactive shell exits with an error status if a variable
|
|
assignment error occurs when no command name follows the assignment
|
|
statements. A variable assignment error occurs, for example, when
|
|
trying to assign a value to a read-only variable.
|
|
|
|
19. A non-interactive shell exits with an error status if the iteration
|
|
variable in a for statement or the selection variable in a select
|
|
statement is a read-only variable.
|
|
|
|
20. Process substitution is not available.
|
|
|
|
21. Assignment statements preceding POSIX.2 `special' builtins persist in
|
|
the shell environment after the builtin completes.
|
|
|
|
There is other Posix.2 behavior that bash does not implement. Specifically:
|
|
|
|
1. Assignment statements affect the execution environment of all builtins,
|
|
not just special ones.
|