Gogo – Create Shortcuts to Long and Complicated Paths in Linux

Gogo is an impressive way to bookmark directories inside your shell. It allows you to create shortcuts to long and complicated paths in Linux. This way, you don’t have to type or remember long and complicated paths anymore in Linux.

For example, if you have a directory ~/Documents/Phone-Backup/Linux-Docs/Ubuntu/, using gogo, you can create an alias (a shortcut name), for instance Ubuntu to access it without typing the whole path anymore. No matter your current working directory, you can move into ~/cd Documents/Phone-Backup/Linux-Docs/Ubuntu/ by simply using the alias Ubuntu.

Read Also: bd – Quickly Go Back to a Parent Directory Instead of Typing “cd ../../..” Redundantly

In addition, it also allows you to create aliases for connecting directly into directories on remote Linux servers.

How to Install Gogo in Linux Systems

To install Gogo, first clone the gogo repository from Github and then copy the gogo.py to any directory in your PATH environmental variable (if you already have the ~/bin/ directory, you can place it here, otherwise create it).

$ git clone https://github.com/mgoral/gogo.git
$ cd gogo/
$ mkdir -p ~/bin        #run this if you do not have ~/bin directory
$ cp gogo.py ~/bin/
Install Gogo in Linux

Install Gogo in Linux

Then add a function from gogo.sh to your ~/.bashrc (for Bash) or ~/.zshrc (for Zsh) file and verity it as shown.

$ cat gogo.sh >> ~/.bashrc
$ tail  ~/.bashrc
$ cat gogo.sh >> ~/.zshrc 
Add Gogo Function to Bashrc

Add Gogo Function to Bashrc

How to Use Gogo in Linux Systems

To start using gogo, you need to logout and login back to use it. Gogo stores its configuration in ~/.config/gogo/gogo.conf file (which should be auto created if it doesn’t exist) and has the following syntax.

# Comments are lines that start from '#' character.
default = ~/something
alias = /desired/path
alias2 = /desired/path with space
alias3 = "/this/also/works"
zażółć = "unicode/is/also/supported/zażółć gęślą jaźń"

If you run gogo run without any arguments, it will go to the directory specified in default; this alias is always available, even if it’s not in the configuration file, and points to $HOME directory.

To display the current aliases, use the -l switch. From the following screenshot, you can see that default points to ~/home/tecmint which is user tecmint’s home directory on the system.

$ gogo -l   
List Gogo Aliases

List Gogo Aliases

Below is an example of running gogo without any arguments.

$ cd Documents/Phone-Backup/Linux-Docs/
$ gogo
$ pwd
Running Gogo Without Options

Running Gogo Without Options

To create a shortcut to a long path, move into the directory you want and use the -a flag to add an alias for that directory in gogo, as shown.

$ cd Documents/Phone-Backup/Linux-Docs/Ubuntu/
$ gogo -a Ubuntu
$ gogo
$ gogo -l
$ gogo -a Ubuntu
$ pwd
Create Long Directory Shortcut

Create Long Directory Shortcut

You can also create aliases for connecting directly into directories on a remote Linux servers. To do this, simple add the following lines to gogo configuration file, which can be accessed using -e flag, this will use the editor specified in the $EDITOR env variable.

$ gogo -e

One configuration file opens, add these following lines to it.

sshroot = ssh://[email protected]:/bin/bash  /root/
sshtdocs = ssh://[email protected]  ~/tecmint/docs/
Gogo Configuration File

Gogo Configuration File

To display the gogo help message, use the -h option.

$ gogo -h

One notable limitation of gogo is its lack of support for auto-completion – when accessing subdirectories/child directories under an aliased long path.

Gogo github repository: https://github.com/mgoral/gogo

Gogo is a remarkable way that comes in handy, for creating shortcuts to long and complicated paths in Linux. Try it out and share your thoughts about it or ask any questions via the comment form below.

Best Affordable Linux and WordPress Services For Your Business
Outsource Your Linux and WordPress Project and Get it Promptly Completed Remotely and Delivered Online.

If You Appreciate What We Do Here On TecMint, You Should Consider:

  1. Stay Connected to: Twitter | Facebook | Google Plus
  2. Subscribe to our email updates: Sign Up Now
  3. Get your own self-hosted blog with a Free Domain at ($3.45/month).
  4. Become a Supporter - Make a contribution via PayPal
  5. Support us by purchasing our premium books in PDF format.
  6. Support us by taking our online Linux courses

We are thankful for your never ending support.

Aaron Kili

Aaron Kili is a Linux and F.O.S.S enthusiast, an upcoming Linux SysAdmin, web developer, and currently a content creator for TecMint who loves working with computers and strongly believes in sharing knowledge.

Your name can also be listed here. Got a tip? Submit it here to become an TecMint author.

RedHat RHCE and RHCSA Certification Book
Linux Foundation LFCS and LFCE Certification Preparation Guide

You may also like...

8 Responses

  1. sitaram says:

    The bulk of what this tool does can be replaced with a shell function that does `cd $(grep -w ^$1 ~/.config/gogo.conf | cut -f2 -d' ')`, where `$1` is the argument supplied to the function.

    If you’ve already installed fzf (and you really should), then you can get a far better experience than even zsh’s excellent “completion” facilities. I use something like `cd $(fzf -1 +m -q "$1" < ~/.cache/to)` (My equivalent of gogo.conf is `~/.cache/to`).

  2. Aaron Kili says:


    Okay, thanks for letting us know.

  3. Tim Faulkner says:

    This addresses the ugettext error.


  4. Chevdor says:

    z / j / jump sounds better to me since you don’t need to create any Bookmark but only visit the folder once.

  5. Kamran says:

    Thanks for this useful utility. I followed the instructions but when I execute gogo I get this:

    Traceback (most recent call last):
      File "/home/USER/bin/gogo.py", line 35, in 
        _ = t.ugettext
    AttributeError: 'NullTranslations' object has no attribute 'ugettext'

    I am using Archlinux and python 3.6.4

    Could be library dependency problem or version mismatch? Any ideas?

Got something to say? Join the discussion.

Your email address will not be published. Required fields are marked *

This site uses Akismet to reduce spam. Learn how your comment data is processed.