Вы не говорите, под чем точно Вы подразумеваете catch
---сообщите и продолжите; прервать последующую обработку?
С тех пор cd
возвращает ненулевое состояние при отказе, Вы могли сделать:
cd -- "$1" && echo OK || echo NOT_OK
Вы могли просто выйти при отказе:
cd -- "$1" || exit 1
Или, повторите свое собственное сообщение и выход:
cd -- "$1" || { echo NOT_OK; exit 1; }
И/или подавите ошибку, обеспеченную cd
при отказе:
cd -- "$1" 2>/dev/null || exit 1
По стандартам команды должны поместить сообщения об ошибках на STDERR (дескриптор файла 2). Таким образом 2>/dev/null
говорит перенаправление STDERR "битоприемнику", известному /dev/null
.
(не забывайте заключать свои переменные в кавычки и отмечать конец опций для cd
).
Некоторые из утилит, установленных как часть пакета, являются сценариями perl
:
$ head -n 1 /usr/bin/mysql_fix_extensions
#! /usr/bin/perl
$ head -n 1 /usr/bin/mysql_convert_table_format
#! /usr/bin/perl
и так далее....