как получить код выхода при использовании xargs (параллельно)

Я создал сценарий для запуска параллельного процесса rsync:

#! /bin/bash
LIST=$1
DEST_DIR=$2
RSYNC_OPTS=$3
#echo "rsyncing From=$SRC_DIR To=$DEST_DIR RSYNC_OPTS=$RSYNC_OPTS"
echo $LIST|xargs -n1 -d, echo|xargs -n1 -P 0 -I% rsync --rsync-path='sudo rsync' ${RSYNC_OPTS} % ${DEST_DIR}

Тогда у меня возникают проблемы с получением статуса выхода процесса rsync. Я знаю, что можно получить массив pipestatus, но мне нужно поймать код выхода, чтобы узнать, был ли rsync успешно выполнен или нет.

Кто-нибудь знает?

Ответы

Ответ 1

На странице man для xargs показаны возможные значения статуса выхода, однако он может генерировать только один обобщенный код выхода, а не код выхода для каждого запускаемого ребенка. Вы можете попробовать один из следующих вариантов:

  • Имейте процесс, который xargs порождает печать своего кода выхода, и родительская задача анализирует все выходные коды выхода, чтобы определить код выхода для каждого rsync.
  • Используйте GNU параллельно с --joblog. Это создаст файл, содержащий все команды, которые запускались параллельно вместе с кодом выхода и другой информацией. Затем этот файл можно разобрать после parallel выходов, чтобы определить, какие команды rsync не выполнялись, и соответствующие коды ошибок.