Bookmark directories inside your shell.
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
Michał Góral 6294431969 Fixed config path in README. 3 years ago
LICENSE.txt Initial commit 5 years ago Fixed config path in README. 3 years ago
gogo.compl Set CONFALIASES before using it. 4 years ago 'gogo' function should return a status code from 3 years ago 'gogo' function should return a status code from 3 years ago


gogo is a great way to bookmark directories inside your shell. You don’t have to remember long and complicated paths anymore. Just type gogo xmas from anywhere and you’re in ~/Pictures/from_mum/1994/12/christmas. You can even use it to connect to ssh servers the very same way!


gogo, like every script, is executed in a child shell so it’s impossible to directly change the directory of parent shell. That’s why if you want to use gogo, you have to do a 2-step installation:

  1. Copy to any directory in your $PATH, e.g. ~/bin/:

    mkdir -p ~/bin && cp ~/bin/
  2. Add a function from e.g. to your .bashrc or .zshrc. You can also source it there.

    cat >> ~/.bashrc


    cat >> ~/.zshrc

    source version with .bashrc:

    cp ~/ && echo "source ~/" >> ~/.bashrc

You can simply use your favorite text editor to perform one of these operations. It’s probably the safest to do it anyway.


gogo                 : change directory to default or $HOME if default is not set
gogo alias           : change directory to 'alias'
gogo alias/child/dir : change directory to the child directory of your alias (i.e. 'alias'/child/dir)
gogo -a alias        : add current directory as alias to the configuration
gogo -h, gogo --help : display help message
gogo -l, gogo --ls   : list aliases
gogo -e, gogo --edit : edit configuration in $EDITOR

Note however that changing a directory to the child of alias will not work if your alias already have slash in it. Sorry!

Remember that gogo prints all user-output to stderr so you won’t be able to see it if it’s redirected on your system. Sorry, but it’s the only way gogo can work.


gogo stores configuration file in ~/.config/gogo/gogo.conf. It’s auto created if it doesn’t exist. The syntax is pretty simple:

# 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źń"

default is a special alias - gogo will go there if it’s executed with no arguments. It’s always available, even if it’s not in a configuration file. In that case it will point to $HOME directory.

Please note that you cannot place a comment at the same line as the alias definition.

gogo allows you to create aliases for connecting directly into directories on ssh servers:

sshalias = ssh://server_info:shell /desired/path
sshalias2 = ssh://another_server ~/second/path

server_info is provided in a typical ssh format, so it can be e.g. username@server or a host alias stored in your ~/.ssh/config file. After that comes an optional shell argument (separated by a colon) into which you will be logged in. (Note however that if shell is not explicitly specified, value of your ${SHELL} environment variable will be used.) Then, after a space, comes an actual path.

If you ever wonder what commands gogo executes, you can alway call it directly: