Как передать вывод из sed -n в xargs?

Вы ищете что-то более сложное, чем это?

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.

3
19.04.2021, 15:13
1 ответ

Я нашел ответ здесь:https://stackoverflow.com/a/23030127/1011766

Поскольку fswatchявляется долго -работающим процессом, мне пришлось использовать флаг -used для разбуферизации потока.

-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 {}
4
28.04.2021, 22:52

Теги

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