The shopt built-in
I recently posted some Bash tips, a couple of which used the
shopt built-in command. The
shopt, or shell optional, built-in is interesting. It allows you to configure some additional, optional, shell behavior. You can use the command for the current session or you can use it in the
~/.bashrc file to configure options for every session. Let’s take a quick look at how to use the
shopt built-in and some of the available options you can try.
~/.bash_profilefile to configure login shells and the
~/.bashrcfile, which is used to configure interactive non-login shells. What’s a login shell? A login shell is the first process that executes under your user ID when you log in for an interactive session, for example via an SSH session. This runs the commands inside the
~/.bash_profilefile (and generally some central shell configuration) which generally sets configuration like environment variables. An interactive non-login shell is launched when you do something like start a session in a terminal. This will run the commands in the
shopt command without any flags gives you a list of the currently configured shell options, some of which are on by default.
To see only the set options you can run
shopt with the
-s flag and for unset options use the
You also use the
-u followed by a specific option to set or unset a shell option, for example to turn on
autocd, which we discussed in the last post.
What shell options are there?
Let’s quickly look at some of the available shell options you might be interested in trying out.
autocd, if you enable
cdable, then any argument to the
cd command, that is not the name of a directory, is assumed to be the name of a variable whose value is the directory to change to.
checkjobs option is enabled then Bash will list the state of any stopped or running jobs before exiting an interactive shell.
If any jobs are running it’ll require two
exit commands in sequence to exit the interactive shell. If any jobs are stopped, like in our example above, then you can see Bash has required a second
exit, after stopping the running job to exit the session.
dirspell and direxpand
dirspell option attempts spelling correction on directory names during word completion if the directory name initially supplied does not exist. It’s usually set on with the
direxpand option, which replaces directory names with the results of work expansion when performing filename completion, for example when using completion with the
When set, the
dotglob option includes filenames beginning with a
. when filename expanding.
Many of the
shopt options will probably never be useful (or are on by default) but some can be quite useful on occasion and I hope you find this enlightening!