I used to retrieve carefully-constructed
cdcommands from my history. But then, I got a goat.~ Jonathan Paugh on Google+
[ ~/Pictures ] $ goat dev ~/Documents/devel # create a link to the dev directory
[ ~/Pictures ] $ ls # see that there is no ~/Pictures/dev directory here
seahorses wallpapers
[ ~/Pictures ] $ cd dev # the goat framework's got you covered!
[ ~/Documents/devel ] $Oh my! This is a POSIX-compliant shell movement boosting hack for real ninjas.
#posix_me_harder #posixly_correct~ 0mp
Sometimes you jump around your filesystem tree a lot and you end up putting a couple of ugly aliases into your shell's rc file.
I should try it, even if it is dumb!
~ dse on What the Daily WTF? about goat v1.1.1
With goat you can easily manage your ninja shortcuts - just type goat p ~/Projects to introduce a new link and then cd p to jump to its destination.
Rad! I can do
cd ....now instead of performing a horse galloping-like waltz with../being my miserable dance floor. I'm cloning this goat straight away!~ YA0mp
BTW, Bash completion is now fully working with goat's shortcuts.
$ make all$ make installAferwards, add libgoat sourcing to your shell's initialization file
(e.g., ~/.bashrc):
$ echo '. "$(goat libexec)"' >> ~/.bashrcGoat is going to be available the next time you start your shell.
Make sure that ~/.local/bin is in your PATH, e.g.:
$ cat <<'EOF' >> ~/.bashrc
case "$PATH" in
*$HOME/.local/bin*) ;;
*) PATH="$HOME/.local/bin:$PATH" ;;
esac
EOFIn a non-XDG environment or if bash-completion version is 2.8 or lower,
make sure that files inside ~/.local/share/bash_completion/completions are actually
sourced by the Bash completion library, e.g.,
$ cat <<'EOF' >> ~/.bash_completion
if [[ -d ~/.local/share/bash_completion/completions ]]
then
for f in ~/.local/share/bash_completion/completions/*
do
[[ -f $f ]] && source "$f"
done
fi
EOFCreate a shortcut named “f” to ~/Documents/dev/freebsd (no need to use
the link command explicitly here):
$ goat f ~/Documents/dev/freebsd
Follow a link to change a directory with cd(1):
$ cd f
Take the “f” shortcut and enter its destination subdirectory with just
one command:
$ pwd
/home/0mp
$ cd f/ports
$ pwd
/usr/home/0mp/freebsd/ports
Create a shortcut named “p” to the current directory:
$ goat p .
Go up the filesystem tree with ... (same as the standard “cd ../../”):
$ cd ...
List all your links:
$ goat list
dots -> /usr/home/0mp/.dotfiles
down -> /usr/home/0mp/Downloads
f -> /usr/home/0mp/freebsd
p -> /usr/home/0mp/freebsd/ports
pa -> /usr/home/0mp/freebsd/patches
src -> /usr/home/0mp/freebsd/svn/src
svn -> /usr/home/0mp/freebsd/svn
Delete a link (or more):
$ goat delete f p
Delete all the links which point to directories with the given prefix:
$ goat deleteprefix "$HOME/Documents"Licensed under 2-Clause BSD license. Copyright © 2016-2026 Mateusz Piotrowski