Имею следующее:
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
Я бы хотел:
command not found
ошибка.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;
Ця!