An attempt at saner Bash defaults. Inspired by Tim Pope's sensible.vim.
Sensible Bash is intended to be a simple starting point for a better Bash user experience out of the box.
Refer to the commented source for a complete list of all the options with explanations. Here's a taste:
Readline bindings to improve on Bash's default tab completion:
- Perform file completion in a case insensitive fashion
- Treat hyphens and underscores as equivalent
- Display matches for ambiguous patterns at the first press of the tab key (instead of requiring two tab-presses)
Sensible defaults for the command history:
- Append to the history file instead of overwriting it
- Save multi-line commands as one command
- Record each line as it gets issued
- Keep track of a bigger history
- Avoid duplicate entries
- Avoid recording unneeded commands (
exit,ls,bg,fg, andhistoryitself) - Use a standard ISO 8601 timestamp for recording commands (ex:
2016-04-09 13:06:31)
Read more about the settings used here in the article Better Bash History by Tom Ryder.
Options that considerably speed up the ability to navigate throughout the file system:
- Prepend
cdto directory names automatically, so you can change to a directory just by typing its name - Automatically correct spelling errors during tab-completion and in arguments supplied to
cd - Set more targets to the
cdcommand besides the current working directory (ex:projects,repos,documents, etc) - Define paths as variables and
cdinto it from anywhere, kind of like a bookmarking system for Bash (cdable_vars)
You can copy sensible.bash in your bashrc, cherry-pick the options you like, or source the file at the top of your bashrc:
if [ -f ~/bin/sensible.bash ]; then
source ~/bin/sensible.bash
fiIn order to get Sensible Bash to work correctly, make sure that:
- You're running at least Bash 4.x (
echo $BASH_VERSION). - You have the Bash Completion package installed and properly configured on your system.
- If you're on macOS, I recommend to follow Josh Staiger's advice and source
bashrcfrombash_profileso to keep all your configuration in one place.
- My article about Sensible Bash
- My dotfiles for more *nix configuration goodies
- Unix as IDE, my ebook port of the excellent post series by Tom Ryder