Подтвердить что ты не робот

Bash псевдоним с аргументом и автозавершением

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

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

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

4b9b3361

Ответ 1

Если ваша функция называется "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 "[email protected]"; }

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

Ответ 2

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

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

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

a() {
    cat `which $1`
}

Вы можете ввести его в интерактивном режиме в командной строке:

shell:>a() {
>cat `which $1`
>}
shell:>