Как создать псевдоним, который фактически расширяет другой псевдоним с тем же именем в Bash?
Почему:
Я имел обыкновение GREP_OPTIONS
устанавливать .bashrc
что-то вроде этого:
GREP_OPTIONS="-I --exclude=\*~"
У меня также был сценарий (скажем, setup-java.sh
), который я бы назвал, прежде чем работать над некоторыми проектами Java. Он будет содержать строку:
GREP_OPTIONS="$GREP_OPTIONS --exclude-dir=classes"
Если бы я также использовал Sass, я бы назвал, setup-sass.sh
который содержит строку:
GREP_OPTIONS="$GREP_OPTIONS --exclude-dir=\*/.sass-cache"
Но GREP_OPTIONS
был признан устаревшим и, по-видимому, стандартным решением является создание псевдонима или какого-либо сценария ...
Ответы:
Bash хранит значения псевдонимов в массиве с именем
BASH_ALIASES
:С расширением параметра мы можем получить либо последний установленный псевдоним (если существует), либо значение по умолчанию:
Теперь просто сделайте это на
setup-java.sh
:... и наконец
setup-sass.sh
:Если три строки называются, мы получаем то, что хотим:
источник
aliases
цепь, если вы заканчиваете их пробелами.Вы можете написать целые сценарии таким образом, если вы достаточно сумасшедший. В любом случае, если вы хотите расширить псевдоним, просто убедитесь, что псевдоним, который вы хотите расширить, заканчивается пробелом и добавьте еще один.
источник
exdir
? (Это только для выравнивания по эстетическим причинам?)fnmatch(){ alias fnmatch='case $1 in '; while "${1:+:}" 2>&-; do eval 'fnmatch pattern list ;; esac'; shift; done; unalias fnmatch; }; alias pattern='${1:+*}) ' list=': do stuff '; fnmatch "$@"
. Выполнение этого с помощьюaliases
позволяет вам использовать расширения шаблонов более напрямую и более безопасно. Вам нужен второй контекст ж /eval
при вызове из функции, но это не по своей сути небезопасно, покаpattern
иlist
названия контролируются вами. Они могут разорвать только в большинстве случаев , даже если они не , если какой - то злоумышленник сознательно правильно заканчивается СВОЙcase
..bashrc
:,alias sudo='sudo '
это позволяет мне вызывать все мои команды с псевдонимами после asudo
. Без места это не сработало быФункция здесь лучше, чем расширяемый псевдоним.
Таким образом, у вас есть два варианта для добавления параметров в среду:
Изменить
grep_options
массив; это правильно поддерживает параметры с пробелами, буквенными символами глобуса и другими угловыми случаями:Используйте традиционную
GREP_OPTIONS
скалярную переменную, несмотря на ее недостатки (см. BashFAQ # 50, чтобы понять некоторые из них):Тем не менее, если вы хотите, чтобы ваши параметры отражались
grep
экземплярами, вызванными вне оболочки, ни псевдоним, ни функция не подойдут. Вместо этого вам нужно, чтобы скрипт-обертка был помещен в ваш PATH раньше, чем настоящаяgrep
команда. Например:... и в
~/bin/grep
:источник