Использование параметров функции в псевдониме сценария bash

#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