Command Shell Options

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.

ITWorld DealPost: The best in tech deals and discounts.
Shop Tech Products at Amazon