Вы ищете что-то более сложное, чем это?
emsg=$(your_command... 2>&1) ||
case $emsg in
*"ignorable error condition"*) ;; # do nothing
*) printf >&2 '%s\n' "$emsg"; exit 1 ;;
esac
Как функция:
# usage ignore pattern cmd [args...]
ignore(){(
pat=$1; shift; exec 3>&1
emsg=$("$@" 2>&1 >&3 3>&-) || { e=$? &&
case $emsg in
$pat) ;; # ignore
*) printf >&2 '%s\n' "$emsg"; exit "$e" ;;
esac
}
)}
Вам придется избавиться от лишнего жонглирования fd, если ваша программа записывает свое error: 409..
сообщение в stdout , а не в stderr.
Я нашел ответ здесь:https://stackoverflow.com/a/23030127/1011766
Поскольку fswatch
является долго -работающим процессом, мне пришлось использовать флаг -u
sed для разбуферизации потока.
-u, --unbuffered
load minimal amounts of data from the input files and flush the output buffers more often
Это простое исправление помогло:
fswatch -xr mysitedir | sed -un '/Updated$/p' | xargs -L1 -I {} echo {}
Лучшим решением от @cas для моего конкретного случая использования -является использование fswatch
встроенного -флага события --:
fswatch --event Updated -0r mysitedir | xargs -0r -I{} echo {}