83 lines
		
	
	
		
			2.0 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
			
		
		
	
	
			83 lines
		
	
	
		
			2.0 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
| 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.
 |