Назад | Перейти на главную страницу

Bash: Как передать текст «команда не найдена» в функцию ловушки?

Имею следующее:

test.sh

. Foo.sh

Foo.bar
Foo.baz
Foo.blah

и

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

Это то, что я получаю, когда бегу test.sh:

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

Я бы хотел:

  1. подавить command not found ошибка.
  2. пройти Foo.blah: command not found текст на Foo.error() выполнить какое-либо действие на основе ошибки.

Полагаю, я мог бы перенаправить ошибки в / dev / null вот так:

./test.sh 2> /dev/null

Но это не так элегантно, как хотелось бы. В любом случае он по-прежнему не дает моей функции error () доступа к тексту ошибки.

Почему бы тебе просто не использовать test чтобы проверить, существует ли команда и является ли она исполняемой? Как это:

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

Ця!