Возвращаемое значение и статус возврата сопроцесса

Версии

java-1.8.0-openjdk-develи java-1.8.0-openjdkдолжны точно совпадать.

короче:

yum downgrade java-1.8.0-openjdk-1.8.0.161-2.b14.el7
yum install java-1.8.0-openjdk-devel-1.8.0.161-2.b14.el7.x86_64.rpm

Я только что написал полный ответ на этот вопрос здесь:https://stackoverflow.com/questions/57498755/installing-python36-devel-on-rhel7-failing/57519956#57519956

0
18.09.2021, 22:52
1 ответ

Чтобы получить статус выхода команды, вам нужно waitна ее идентификаторе процесса. Вы можете увидеть это и разницу между статусами на этом примере:

coproc mytr { tr a b; exit 2; }
rc=$? fdi=${mytr[0]} fdo=${mytr[1]} pid=$mytr_PID
echo "rc=$rc fdi=$fdi fdo=$fdo pid=$pid"
echo aaa >&$fdo
exec {fdo}>&- 
cat -v <&$fdi
wait $pid
echo $?

Мы запускаем именованный coproc mytr, который переводит a в b и после чтения eof завершает работу с кодом возврата 2. Следующее эхо показывает, что эта команда coproc имеет код возврата 0, успех, и что bash установил массив mytrво входящие и исходящие файловые дескрипторы процесса.PID находится в переменной mytr_PID, которую мы копируем, так как она исчезнет, ​​когда завершится процесс co-.

Мы отправляем строку "aaa" в coproc, затем закрываем вход fd с синтаксисом {variable}>&-. Мы читаем вывод команды tr, то есть «bbb», и ждем завершения процесса. Код выхода wait— это код выхода процесса. Вывод

rc=0 fdi=63 fdo=60 pid=8137
bbb
2

Примечание. :fdo и fdi видны родительскому процессу, следовательно, эхо-сигнал для fdo является выходом на вход дочернего сопроцесса .

2
19.09.2021, 10:12

Теги

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