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

Но это не столь изящно, как я хотел бы, чтобы это было. В любом случае это все еще не дает мою ошибку () функциональный доступ к тексту ошибки.

1
задан 23 October 2015 в 00:08
1 ответ

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

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

Ця!

1
ответ дан 3 December 2019 в 23:58

Теги

Похожие вопросы