Назад | Перейти на главную страницу

cd + bash скрипт завершения

У меня есть веб-проекты в /var/www/projects/some/long/path/strange-project-name

Теперь я хочу ввести терминал:

webs str{TAB}

Он должен автоматически заполняться до webs strange-project-name (на основании ls /var/www/projects/some/long/path/) и после выполнения команды pwd должен указывать на путь к проекту. Вид умный cd strange-project-name с автозаполнением

Как бы вы реализовали эту функцию? Какой-то умный псевдоним? Функция в .bashrc? Сценарий?

Какой-то умный псевдоним?

Вам понадобится двухчастный. Один, сценарий завершения:

_webs() {
    local cur prev projdir=/var/www/projects/some/long/path

    COMPREPLY=()
    cur=$(_get_cword)
    prev=${COMP_WORDS[COMP_CWORD-1]}

    COMPREPLY=( $( compgen -W '$( command ls "$projdir/$cur*" | sed "s|$projdir/||")' -- '' ) )
}
complete -F _webs webs

_get_cword зависит от устанавливаемого пакета bash-completions. Если у вас его нет, измените строку:

cur=$(_get_cword)

кому:

cur=${COMP_WORDS[$COMP_CWORD]}

Два, функция:

webs () {
    local projdir=/var/www/projects/some/long/path
    cd "$projdir"
    do_something_ "$@"
}

Я не уверен, что это то, что вам нужно ...

в терминале ...

sudo vim /etc/inputrc

найдите эти строки и раскомментируйте их:

# alternate mappings for “page up” and “page down” to search the history

#”\e[5~”: history-search-backward

#”\e[6~”: history-search-forward

теперь вы можете автоматически заполнять команды из своей истории со страницей вверх / вниз

Для этого я бы создал собственный скрипт автозаполнения bash. Взгляни на /etc/bash_completion.d справочник и его многочисленные примеры. Затем создайте файл с именем webs в этот каталог и адаптируйте его под свои нужды.

Поправьте меня, если я ошибаюсь, но я думаю, что это именно то, что Молнии был создан для. Это проект Ruby, поэтому это не лучший ответ, если использование Bash само по себе является целью.