Как я получаю код возврата команды в канале, работаю как фоновый процесс?

В рамках сценария Bash, если я выполняю команду в канале специальный параметр $? будет содержать код возврата последней команды в канале. Например, с намеренным сбоем rsync команда, я получаю код возврата tee команда:

$ rsync /non-existent-dir/ /another-dir2/ 2>&1 | tee outfile1 > outfile2
$ echo $?
0

Я могу получить код возврата rsync команда при помощи первой записи в специальном массиве, который содержит коды возврата последнего канала $PIPESTATUS

$ rsync /non-existent-dir/ /another-dir2/ 2>&1 | tee outfile1 > outfile2
$ echo ${PIPESTATUS[0]}
23

Обычно, если я фон задача, я могу использовать wait собрать его код возврата, как wait зеркально отразит код возврата фоновой задачи, которой он ожидает.

$ rsync /non-existent-dir/ /another-dir2/ 2>&1 > outfile1 &
$ wait $!
$ echo $?
23

Я, может казаться, не комбинирую эти два метода для получения кода возврата, если фоновый процесс включает канал? У меня есть чувство, что объединение методов не является способом сделать это, и я должен использовать другой подход.

Как я выполняю команду как следующее и собираю код возврата первой команды?

$ rsync /non-existent-dir/ /another-dir2/ 2>&1 | tee outfile1 > outfile2 &
2
задан 16 December 2016 в 16:43

0 ответов

Другие вопросы по тегам:

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