Bash: Como eu passo o texto “command not found” na minha função trap?

1

Eu tenho o seguinte:

test.sh

. Foo.sh

Foo.bar
Foo.baz
Foo.blah

e

Foo.sh

function Foo.bar() {
    echo 'I am a bar!'
}

function Foo.baz() {
    echo 'But, I am a baz!'
}

function Foo.error() {
    # I should suppress the 'command not found' error based on the pattern '^Foo\.([^:]+):'
    # If the pattern is matched, I'll need to perform some action based on the captured pattern.
}
trap Foo.error ERR

Isso é o que recebo quando executo test.sh :

$ ./tesh.sh
I am a bar!
But, I am a baz!
./test.sh: line 5: Foo.blah: command not found

Eu gostaria de:

  1. suprime o erro command not found .
  2. passe o texto Foo.blah: command not found para Foo.error() para realizar alguma ação com base no erro.

Suponho que eu possa redirecionar erros para / dev / null da seguinte forma:

./test.sh 2> /dev/null

Mas isso não é tão elegante quanto eu gostaria que fosse. De qualquer forma, ainda não dá acesso à minha função error () ao texto do erro.

    
por Housni 22.10.2015 / 23:08

1 resposta

1

Por que você não usa apenas test para verificar se o comando existe e é executável? Assim:

if [[ -x /my/executable/file ]]; then
    echo "Oh, there we go!";
else
    echo "Oh damn! =(";
fi;

Cya!

    
por 22.10.2015 / 23:28