The Korn shell has a number of options that specify your environment and control execution. There are options that cause background jobs to be run at a lower priority, prevent files from being overwritten with redirection operators, disable filename expansion, specify the vi-style in-line command editor, and more.
Table 7.2 lists some of the Korn shell options, along with the default values (these may differ on your system). All of the options are listed in Appendix E.
set –a, set –o allexport | automatically export variables when defined |
set –o bgnice | execute all background jobs at a lower priority |
set –o emacs, set –o gmacs | use emacs/gmacs in-line editor |
set –o ignoreeof | do not exit on end of file; use exit (default Ctl-d) |
set –o markdirs | display trailing / on directory names resulting from file name substitution |
set –m, set –o monitor | enable job control (system dependent) |
set –n, set –o noexec | read commands without executing them |
set –o noclobber | prevent I/O redirection from truncating existing files |
set –f, set –o noglob | disable file name expansion |
set –u, set –o nounset | return error on substitution of unset variables |
set –h, set –o trackall | make commands tracked aliases when first encountered |
set –o vi | use vi-style editor for in-line editing |
set –x, set –o xtrace | display commands and arguments as they are executed |
Korn shell options are enabled with the set –ooption or set –option command. For example, the noglob option disables file name substitution and can be set using either of these commands :
$ set —f
or
$ set —o noglob
Options can also be enabled by specifying them on the ksh command line. Here, a Korn subshell is started with the emacs option enabled:
$ ksh —o emacs
Options can be disabled with the set +o option or set +option command. In this example, the noglob option is disabled:
$ set +o noglob
If this option is enabled, you get this message when you try to log off using Ctl-d:
$ set —o ignoreeof $ Ctl-d Use 'exit' to terminate this shell
By default, this option is disabled.
When enabled, a trailing / is appended to directory names resulting from file name substitution. It's like the ls –o or –F options, except that you only see the results on file name substitution, not on directory listings. This means that / is added to directory names when you do this:
$ ls *
but not this:
$ ls
By default, the markdirs option is disabled.
The noclobber option prevents I/O redirection from truncating or clobbering existing files. Let's enable the option and give it a try:
$ set —o noclobber $ ls>ls.out $ ls>ls.out /bin/ksh: ls.out: file already exists
If noclobber is enabled, and you really want to overwrite a file, use the >| operator:
$ ls>|ls.out
By default, this option is disabled.
If the nounset option is disabled, then the Korn shell interprets unset variables as if their values were null.
$ unset X $ print "X is set to: $X" X is set to:
If enabled, the Korn shell displays an error message when it encounters unset variables and causes scripts to abort:
$ set —o nounset $ unset X $ print $X /bin/ksh: X: parameter not set
The setting of the current options is displayed with the set –o command. The first field is the option name, and the second field shows if the option is enabled or disabled:
$ set —o allexport off bgnice on emacs off errexit off gmacs off ignoreeof off interactive on keyword off markdirs off monitor on noexec off noclobber off noglob off nolog off nounset off privileged off restricted off trackall off verbose off vi on viraw on xtrace off
Besides the options from the set command, the following options can also be specified on the ksh command line:
–c string | read and execute the commands from string |
–i | execute in interactive mode |
–r | run a restricted shell |
–s | read commands from standard input |
These cannot be enabled with the set command.
18.118.253.223