Консольная утилита goto создана для удобного управления алиасами директорий при работе в терминале.
Устанавливаем goto забрав его из Github репозитория, при установке утилита попросит права суперпользователя:
# git clone https://github.com/iridakos/goto.git # cd goto/ # ./install
В процессе установки, скрипт будет скопирован в /usr/local/share/goto.sh, а в ~/.bashrc или ~/.zshrc будут добавлены строки:
# Source goto [[ -s "/usr/local/share/goto.sh" ]] && source /usr/local/share/goto.sh
Если мы хотим, что бы goto был доступен какому-то пользователю, то приведённые выше строки нужно добавить в его ~/.bashrc.
Далее нам просто остаётся настроить нужные алиасы, и goto будет готов к использованию. Допустим, у нас есть директория /home/user/rpmbuild/SPECS/ в которую мы часто переходим работая в терминале. Добавляем алиас для неё:
# goto -r specs /home/user/rpmbuild/SPECS/
И теперь, перейти в директорию мы можем просто введя команду goto specs:
# pwd /opt # goto specs # pwd /home/user/rpmbuild/SPECS
Типичный пример использования такой утилиты у меня — это переход в директорию с файлами нужного домена на сервере. Когда пользователей и доменов на сервере очень много, для того что бы найти нужную директорию, приходится вспоминать/перебирать, либо смотреть в конфиге нужный путь, с goto это дело значительно упрощается. Достаточно ввести что-то вроде:
# goto sysadmin_pm
И я оказываюсь в директории с нужным доменным именем.
Вывод списка всех алиасов выполняется командой:
$ goto -l specs /home/user/rpmbuild/SPECS tlg /home/user/.tlg/Telegram spft /home/user/SP/SP_Flash_Tool_v5.1628_Linux
Для удаления какого-то конкретного алиаса выполняем:
$ goto -u aliasname
При необходимости, мы можем очистить алиасы, которые указывают на уже не существующие директории:
$ goto -c
Вот такой простой, но в то же время, серьёзно упрощающий жизнь системного администратора инструмент. Берите на заметку, если не знали о нём раньше.
У меня в bashrc вот такое самодостаточное красивое решение, в котором в том числе работает autocompletion имён в bash:
##################################################
# marks
# http://jeroenjanssens.com/2013/08/16/quickly-navigate-your-filesystem-from-the-command-line.html
# $ cd ~/some/very/deep/often-used/directory
# $ mark deep
# This adds a symbolic link named deep to the directory ~/.marks. To jump to this directory, type the following from any place in the filesystem:
# $ jump deep
# To remove the bookmark (i.e., the symbolic link), type:
# $ unmark deep
# You can view all marks by typing:
# $ marks
# deep -> /home/johndoe/some/very/deep/often-used/directory
# foo -> /usr/bin/foo/bar
export MARKPATH=$HOME/.marks
function jump {
cd -P «$MARKPATH/$1» 2>/dev/null || echo «No such mark: $1»
}
function mark {
mkdir -p «$MARKPATH»; ln -s «$(pwd)» «$MARKPATH/$1»
}
function unmark {
rm -i «$MARKPATH/$1»
}
unamestr=`uname`
if [[ «$unamestr» == ‘Darwin’ ]]; then
function marks {
\ls -l «$MARKPATH» | tail -n +2 | sed ‘s/ / /g’ | cut -d’ ‘ -f9- | awk -F ‘ -> ‘ ‘{printf «%-10s -> %s\n», $1, $2}’
}
else
function marks {
ls -l «$MARKPATH» | sed ‘s/ / /g’ | cut -d’ ‘ -f9- | sed ‘s/ -/\t-/g’ && echo
}
fi
_completemarks() {
local curw=${COMP_WORDS[COMP_CWORD]}
# local wordlist=$(find $MARKPATH -type l -printf «%f\n»)
local wordlist=$(ls —color=never -1 $MARKPATH)
COMPREPLY=($(compgen -W ‘${wordlist[@]}’ — «$curw»))
return 0
}
complete -F _completemarks jump unmark
##################################################