Goto для терминала

Консольная утилита goto создана для удобного управления алиасами директорий при работе в терминале.

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

Вот такой простой, но в то же время, серьёзно упрощающий жизнь системного администратора инструмент. Берите на заметку, если не знали о нём раньше.

@SysadminNotes | https://sysadmin.pm

One thought on “Goto для терминала

  1. У меня в 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
    ##################################################

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *