псевдоним bash с аргументом и автозаполнением - PullRequest
11 голосов
/ 23 сентября 2010

У меня есть куча скриптов в каталоге, который существует на пути, поэтому я могу получить доступ к каждому, где бы я ни находился.Иногда это очень простые утилиты, которые "vims" файл.Время от времени я хотел бы быстро увидеть содержимое файла скрипта и увидеть путь к файлу, который открывает скрипт (затем сделать cat, grep ...).

Я хотел бы сделать псевдоним, который будет "cat "данный скрипт, где бы я ни находился.
Данный скрипт не работает:
alias a="cat `which \$1`"
Если я поместил имя скрипта вместо номера параметра ($ 1), он работает нормально.Но с параметром нет.

Вторым вопросом (я бы хотел, чтобы жизнь была такой красивой!) Было бы автоматическое заполнение имени сценария для этого псевдонима.
Использование сценария, который мог бы существовать в моем каталоге "bin", - другой подходкоторый я могу взять.

Ответы [ 2 ]

6 голосов
/ 23 сентября 2010

Если ваша функция называется «foo», то ваша функция завершения может выглядеть так:

Если у вас установлен пакет завершения Bash:

_foo () { local cur; cur=$(_get_cword); COMPREPLY=( $( compgen -c -- $cur ) ); return 0; }

Если вы этого не сделаете:

_foo () { local cur; cur=${COMP_WORDS[$COMP_CWORD]}; COMPREPLY=( $( compgen -c -- $cur ) ); return 0; }

Затем, чтобы включить его:

complete -F _foo foo

Команда compgen -c заставит завершения включать все команды в вашей системе.

Ваша функция "foo"может выглядеть так:

foo () { cat $(type -P "$@"; }

, что будет cat одним или несколькими файлами, имена которых передаются в качестве аргументов.

6 голосов
/ 23 сентября 2010

Для псевдонима с аргументом используйте function вместо псевдонимов:

a() { cat `which $1` ;}

Или, если вы делаете это более чем в одной строке, пропустите точку с запятой:

a() {
    cat `which $1`
}

Вы можете ввести его в интерактивном режиме по приглашению оболочки:

shell:>a() {
>cat `which $1`
>}
shell:>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...