Custom solution for fast navigation in Bash

·

2 min read

Using the console, you have to cd your way through all your directories, which thanks to autocompletion, can be relatively fast. However, sometimes you have to work with very deep folder structures, with not autocompletion-friendly folder groups and processes that require you to navigate them a lot. As this has been my case for the last few months, I finally decided to make a tool to solve this and reduce the number of keystrokes spent on cd navigation.

This tool is a small bash function called ws, short for workspace. You can find it here. Paste it at the end of your ~/.bashrc or your source file of choice to use it.

Description and usage

For ws, a workspace is a set of directories, each one associated with a numeric ID. You can define as many workspaces as you want, and activate different ones for each open terminal.

Some examples will be more illustrative than any wall of text:

# Create the workspace itself
$ ws -s my_workspace

# Populate it with directories
$ cd /path/to/foo/dir
$ ws -a
$ cd /path/to/bar/dir
$ ws -a
$ cd /path/to/baz/dir
$ ws -a

# Check the directories in your workspace
$ ws -l
Workspace my_workspace:
  1 /path/to/foo/dir
  2 /path/to/bar/dir
  3 /path/to/baz/dir

# Move to a directory in your workspace
$ ws 2
/path/to/bar

# See a list of available workspaces
# The active one is marked with >
$ ws -s -l
Workspaces:
- default
> my_workspace

# Remove a directory from a workspace
$ ws -r 2
$ ws -l
Workspace my_workspace:
  1 /path/to/foo/dir
  2 /path/to/baz/dir

# Remove a workspace
# If it is the current, then the default one is activated
$ ws -s -r my_workspace
$ ws -s -l
Workspaces:
> default

The only downside is that you'll have to remember the IDs of each directory to use it fluently, but this shouldn't be a problem if you end up using it a lot. Also, remember to check that you are using the correct workspace before you start to work; it will remember it if the tty is the same.

Tell me in the comments if you found it useful!