12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182 |
- http://www.opengroup.org/onlinepubs/9699919799/
- Open Group Base Specifications Issue 7
- http://www.opengroup.org/onlinepubs/9699919799/utilities/V3_chap01.html
- Shell & Utilities
- It says that any of the standard utilities may be implemented
- as a regular shell built-in. It gives a list of utilities which
- are usually implemented that way (and some of them can only
- be implemented as built-ins, like "alias"):
- alias
- bg
- cd
- command
- false
- fc
- fg
- getopts
- jobs
- kill
- newgrp
- pwd
- read
- true
- umask
- unalias
- wait
- http://www.opengroup.org/onlinepubs/9699919799/utilities/V3_chap02.html
- Shell Command Language
- It says that shell must implement special built-ins. Special built-ins
- differ from regular ones by the fact that variable assignments
- done on special builtin are *PRESERVED*. That is,
- VAR=VAL special_builtin; echo $VAR
- should print VAL.
- (Another distinction is that an error in special built-in should
- abort the shell, but this is not such a critical difference,
- and moreover, at least bash's "set" does not follow this rule,
- which is even codified in autoconf configure logic now...)
- List of special builtins:
- . file
- : [argument...]
- break [n]
- continue [n]
- eval [argument...]
- exec [command [argument...]]
- exit [n]
- export name[=word]...
- export -p
- readonly name[=word]...
- readonly -p
- return [n]
- set [-abCefhmnuvx] [-o option] [argument...]
- set [+abCefhmnuvx] [+o option] [argument...]
- set -- [argument...]
- set -o
- set +o
- shift [n]
- times
- trap n [condition...]
- trap [action condition...]
- unset [-fv] name...
- In practice, no one uses this obscure feature - none of these builtins
- gives any special reasons to play such dirty tricks.
- However. This section also says that *function invocation* should act
- similar to special built-in. That is, variable assignments
- done on function invocation should be preserved after function invocation.
- This is significant: it is not unthinkable to want to run a function
- with some variables set to special values. But because of the above,
- it does not work: variable will "leak" out of the function.
|