Teste a existência da função que pode funcionar tanto no bash quanto no zsh?

6

Existe uma maneira de testar se existe uma função de shell que funcionará para bash e zsh ?

    
por kjo 21.12.2016 / 20:45

2 respostas

9

Se você quiser verificar se há uma função atualmente definida (ou pelo menos potencialmente marcada para carregamento automático) com o nome foo , independentemente de uma entrada / executável / palavra-chave / alias também estar disponível por esse nome, você poderia faça:

if typeset -f foo > /dev/null; then
  echo there is a foo function
fi

No entanto, se houver uma palavra-chave ou um apelido chamado foo , ela terá precedência sobre a função (quando não citada).

Os itens acima devem funcionar em ksh (de onde vem), zsh e bash .

    
por 22.12.2016 / 00:00
1

Isso é puro POSIX, então deve funcionar em todos os shells POSIX.

foo()
{
    echo "bar"
}

if type 'foo' 2>/dev/null | grep -q 'function'
then
   echo 'function exists'
fi
    
por 21.12.2016 / 21:02