Я хочу проверить, существует ли функция, прежде чем запускать ее в сценарии оболочки.
Поддерживает ли это оболочка сценария? а как это сделать?
Я хочу проверить, существует ли функция, прежде чем запускать ее в сценарии оболочки.
Поддерживает ли это оболочка сценария? а как это сделать?
Как указано в этом комментарии, это должно сделать это:
type -t function_name
это возвращает function
, если это функция.
$ type -t f_test
$
$ f_test () { echo "hello"; }
$ type -t f_test
function
Обратите внимание, что type
предоставляет хорошую информацию:
$ type -t ls
alias
$ type -t echo
builtin
-t
в ash
? Это не POSIX, поэтому мне интересно, является ли это bash
расширением.
- person chepner; 31.07.2013
POSIX не определяет никаких аргументов для встроенного type
и оставляет его вывод неопределенным. Ваш лучший выбор, помимо решения для конкретной оболочки, вероятно,
if type foo | grep -i function > /dev/null; then
# foo is a function
fi
Вы всегда можете просто попробовать выполнить функцию. Если он не существует, статус выхода команды будет 127:
$ myfunction arg1 arg2 || {
> if [ $? -ne 127 ]; then
> echo Error with my function
> else
> echo myfunction undefined
> fi; }
Конечно, функция может иметь то же имя, что и другой двоичный файл, и вы можете не захотеть запускать эту программу, если она не затенена функцией.
make clean
)? Что, если сама функция вернет 127 или ее последняя команда? Я бы не хотел запускать функцию перезагрузки, чтобы посмотреть, существует ли она ...
- person Jens; 02.08.2013