Command Shell Options

By Danny Kalev, ITworld |  How-to

This week I will explain how to toggle specific features to control the
way BASH executes certain commands.

The 'set' command turns features on and off. It takes two arguments: a
flag indicating whether a feature is turned on or off, and the feature
itself. The first argument has two forms: -o and +o which indicate off
and on, respectively. For example, to avoid exiting from an active shell
due to an extra CTL-D keypress, you can turn the 'ignoreeof' feature as

$ set +o ignoreeof

From now on, pressing Ctl-D doesn't log the user out of the command
shell. What is it good for? As you probably know, Ctl-D is used for
logging out of a shell but it also indicates the end of an input stream
in many utilities. For example, the 'cat' utility treats Ctl-D as an end
of a user's input. When using 'cat' or similar applications, you may
inadvertently log yourself out of the command shell by entering an extra
Ctl-D. Turning on the ignoreeof feature causes the shell to ignore
redundant Ctl-D keypresses. In this case, you should use the 'logout'
command to logout.

The noclobber feature protects existing files from being overwritten
accidentally by redirected output. Suppose you decide to redirect the
standard output to a file. If the output filename is identical to an
existing filename, the system will overwrite the latter. To avoid this,
activate the noclobber option before redirecting output:

$ set +o noclobber
$ cat vocabulary > mylist
mylist: file exists

Note that you can override the noclobber option without having to turn
it off. This is useful when you want to redirect output to an existing
file, thereby overwriting it deliberately. To do so, place an
exclamation point after the redirection sign:

$ set +o noclobber
$ cat vocabulary >! mylist

Setting the noglob feature disables special characters in the user
input. Thus, instead of letting the shell process these special
characters, they are treated as ordinary characters. Turning on the
noglob feature is useful when you have files whose names contain special
characters such as *, ?, ~, [, ], and ?. To list a file called
inventory* with the 'ls' command, first turn on the noglob feature:

$ set +o noglob

Now list it:

$ ls inventory*

Without noclobber turned on, the above 'ls' command would display all
the files in the current directory whose names begin with inventory.

Join us:






Answers - Powered by ITworld

ITworld Answers helps you solve problems and share expertise. Ask a question or take a crack at answering the new questions below.

Ask a Question