Не нужно так фантазировать; вы можете наблюдать тот же эффект при
{ echo 'foo' ; sleep 10 ; } | grep oo | grep oo
,
{ echo 'foo' ; sleep 10 ; } | grep oo | cat
или
/tmp
).{ echo 'foo' ; спать 10 ; } | grep oo > foo.out
.ls -ld foo.out
. foo.out
появится сразу,
но имеет размер 0 в течение десяти секунд, после чего становится равным 4 байтам.Просто: grep
проверяет, является ли его (стандартный) вывод терминалом.
Если это так, он записывает вывод так же быстро, как он имеет вывод для записи.
Если это не так, он буферизует свой вывод и записывает N байт за раз,
где N обычно равно 512, но может отличаться в некоторых реализациях.
Утилита expdp
завершает работу с нулевым статусом выхода, если
The export or import job completed successfully. No errors are displayed to the output device or recorded in the log file, if there is one. [Ref: Data Pump Exit Codes].
В противном случае он будет иметь ненулевой -статус выхода. Это стандарт для утилит в Unix. Ноль означает «Успех», а также является «истинным» значением в логических тестах.
Таким образом, в вашем сценарии вы должны иметь возможность сказать
if expdp...other options...; then
echo 'Success'
else
echo 'Failure'
fi
Это означает, что вы получили тесты в своем коде задом наперед.
Если вы действительно хотите отобразить код выхода:
expdp...other options...
code=$?
echo "Exit code is $code"
if [ "$code" -eq 0 ]; then
echo 'Success'
else
echo 'Failure'
fi
Поскольку echo
заменит $?
, вам нужно будет сохранить его значение в новую переменную сразу после использования expdp
.