How to Customize the Bash Shell With shopt


A terminal prompt on a Linux laptop.
Fatmawati Achmad Zaenuri/Shutterstock

If you fine-tune the behavior of your Bash shell with shopt, you can control over 50 settings. We’ll show you how to tailor your Linux system just the way you like it.

The shopt Built-in

The shopt built-in is part of all versions of the Bash shell, so there’s no need to install anything. The number of options available in shopt has increased steadily over the years. So, the older the version of Bash you have, the shorter the list of shopt options will be.

If something doesn’t seem to be working on your machine, check the man page entry for Bash and verify that option is available in your version of shopt.

We cover all the shopt options below. We also describe how to use it and share some examples. From there, you can check out the Bash man page or GNU Bash Reference Manual to see whether any of those options sound useful or appealing.

Some shopt options are enabled by default and form part of Bash’s default behavior. You can enable a shopt option as a short-term change to Bash. It will then revert to the default behavior when you close the shell.

However, if you want a modified behavior to be available whenever you launch a Bash shell, you can make the changes permanent.

The shopt Options

There are 53 shopt options. If you use the shopt command without any options, it lists these. If we pipe the output through the wc command, it will count the lines, words, and characters for us. Because each shopt option is on its own line, the number of lines is the number of options.

We type the following:

shopt | wc

shopt | wc in a terminal window.

To see all of the options, we can pipe the output through the column command to display the option names in columns, or we could pipe it into less.

We type the following:

shopt | column

shopt | column in a terminal window.

Finding shopt in the Linux Manual

The section discussing shopt and its options is in the Bash section of the Linux manual. The Bash section is over 6,000 lines long. You can find the description of shopt with a lot of scrolling, or you can just search for it within the manual.

To do so, open the manual at the Bash section:

man bash

man bash in a terminal window.

In the manual, press / to start a search. Type the following, and then press Enter:

assoc_expand_once

Bash section of the manual, with a search term entered on the command line in a terminal window.

The start of the shoptoption section will appear in the man window.

The manual showing the shopt option section of the Bash man page in a terminal window.

RELATED: How to Use Linux’s man Command: Hidden Secrets and Basics

Setting and Unsetting Options

To set and unset shopt options, use the following commands:

  • -s: Set, or enable.
  • -u: Unset, or disable.

Because some options are enabled by default, it’s also handy to check which options are on. You can do so with the -s and -u options without using an option name. This causes shopt to list the options that are on and off.

Type the following:

shopt -s

shopt -s in a terminal window.

shopt -u | column

shopt -u | column in a terminal window.

You can use a shopt option without the -s or -u commands to see the on or off state for each option.

For example, we can type the following to check the setting of the histverify option:

shopt histverify

We can type the following to set it to on:

shopt -s histverify

Then, we can type the following to check it again:

shopt histverify

shopt histverify in a terminal window.

The histverify option changes how one aspect of the history command operates. Usually, if you ask history to repeat a command by referencing it by number, like !245, the command is retrieved from the command history and executed immediately.

If you prefer to review a command to make sure it’s the one you expected and edit it, if necessary, type the following to set the shopt histverify option to on:

!245

!245 in a terminal window.

The command is retrieved and presented on the command line. You can either delete, edit, or execute it by pressing Enter.

RELATED: How to Use the history Command on Linux

The autocd Option

With the autocd option set to on, if you type the name of a directory on the command line and press Enter, it will be treated as if you’ve typed cd in front of it.

We type the following to turn on the autocd option:

shopt -s autocd

Then, we type the name of a directory:

Documents

shopt -s autocd in a terminal window.

The cdspell Option

When the cdspell option is turned on, Bash will automatically correct simple spelling mistakes and typos in directory names.

We type the following to set the cdspell option:

shopt -s cdspell

To try to change into a directory in lowercase that should have an uppercase initial letter, we type the following:

cd documents

Then, we can type the following to try a directory name with an extra “t” in its name:

cd ../Picttures

shopt -s cdspell in a terminal window.

Bash changes into each directory, regardless of the spelling mistakes.

The xpg_echo Option

When the xpg_echo option is set to on, the echo command will obey escaped characters, like n for new line and t for horizontal tab.

First, we type the following to make sure the option is set:

shopt -s xpg_echo

We then include n in a string we’re going to pass to echo:

echo "This is line onenThis is line two"

shopt -s xpg_echo in a terminal window.

The escaped new-line character forces a line break in the output.

This produces the same behavior as the -e (enable escape interpretation) echo option,  but xpg_echo allows it to be the default action.

RELATED: How to Use the Echo Command on Linux

The dotglob Option

The dotglob option should be treated with a bit of caution. It allows files and directories that start with a period (.) to be included in name expansions or “globbing.” These are called “dot files” or “dot directories” and they’re usually hidden. The dotglob option ignores the dot at the start of their names.

First, we’ll do a search for files or directories that end in “geek” by typing the following:

ls *geek

One file is found and listed. Then, we’ll turn on the dotglob option by typing the following:

shopt -s dotglob

We issue the same ls command to look for files and directories ending in “geek”:

ls *geek

ls *geek in a terminal window.

This time two files are found and listed, one of which is a dot file. You need to be careful with rm and mv when you’ve got the dotglob option set to on.

The nocaseglob Option

The nocaseglob option is similar to the dotglob option, except nocaseglob causes differences in upper- and lowercase letters in file names and directories to be ignored in name expansions.

We type the following to look for files or directories that start with “how”:

ls how*

One file is found and listed. We type the following to turn on the nocaseglob option:

shopt -s nocaseglob

Then, we repeat the ls command:

ls how*

ls how* in a terminal window.

Two files are found, one of which contains uppercase letters.

Making Changes Permanent

The changes we’ve made will only last until we close the current Bash shell. To make them permanent across different shell sessions, we need to add them to our “.bashrc” file.

In your home directory, type the following command to open the “.bashrc” file in the graphical Gedit text editor (or change it accordingly to use the editor you prefer):

gedit .bashrc

The gedit editor will open with the “.bashrc” file loaded. You’ll see some shopt entries are already in it.

The gedit editor with .bashrc loaded in it, and shopt options highlighted.

You can add your own shopt options here, as well. When you’ve added them, save your changes and close the editor. Now, whenever you open a new Bash shell, your options will be set for you.

Options as Far as the Eye Can See

It’s true the shopt command has a lot of options, but you don’t have to come to grips with them all at once, if ever. Since there are so many, there are likely some that will be of no interest to you.

For example, there are a bunch that force Bash to operate in ways that are compatible with specific, older versions. That might be useful for someone, but it’s a fairly niche case.

You can review the Bash man page or GNU Bash Reference Manual. Decide which options are going to make a difference for you, and then experiment with them. Just be careful with options that affect the way file and directory names are expanded. Try them with a benign command, like ls, until you’re comfortable with them.





Source link