#bash #function #alias
#bash #функция #псевдоним
Вопрос:
У меня есть скрипт bash, к которому я хочу добавить псевдоним, который использует некоторые параметры функции. Однако по какой-то причине команда не работает, когда я использую переданные параметры.
Мой псевдоним:
alias pa='_pa() { php artisan "$1" "$2" "$3" "$4" "$5"; }; _pa'
Который должен быть способен консолидироваться php artisan cache:clear
до pa cache:clear
Однако это дает мне запрос на ввод, а не ожидаемую команду: php artisan cache:clear
Почему я не могу создать псевдоним с помощью этой функции?
Ответ №1:
Зачем вы это делаете? Просто измените псевдоним на:
alias pa='php artisan'
Или вообще отказаться от псевдонима и просто использовать функцию?
pa() {
php artisan "$@"
}
Использование "$@"
расширится до такого количества аргументов, сколько вы отправили в pa
Ответ №2:
Псевдоним не принимает параметры. Если у вас есть псевдоним foo
и напишите
foo x y z
оболочка просто расширяет foo до того, что вы когда-либо определяли, поэтому, если, например
alias foo='bar baz'
, приведенная выше строка будет преобразована в
bar baz x y z
Вот почему это называется расширением псевдонима, а не вызовом псевдонима на справочной странице.
Кроме того, ваш псевдоним pa
довольно бессмыслен. Он не делает ничего, кроме определения функции с именем _pa и последующего ее вызова. Поэтому, если в вашей оболочке функция с таким именем ранее не была определена, выполните
pa 10 20 30 40 50
расширяется до
_pa() {
php artisan "$1" "$2" "$3" "$4" "$5"
}
_pa 10 20 30 40 50
и, таким образом, вызывает появление функции _pa, а также вызывает эту функцию. Поскольку у нас есть расширение псевдонима, эти оставшиеся параметры (10, 20, …) добавляются к строке и заканчиваются как параметр функции _pa.
По сути, при каждом повторном использовании вашего псевдонима pa
вы отбрасываете старый _pa
и создаете его заново. Это не запрещено делать, но более чистым решением было бы определить функцию отдельно, и если вы по какой-либо причине хотите иметь второе имя для этой функции, определите псевдоним после:
_pa() {
php artisan "$1" "$2" "$3" "$4" "$5"
}
alias pa=_pa