commit afb144926e2bbd3f4fc1fe883f4d744f87262207
parent 476da62f67007af551b0b6261aa9bbb87046babd
Author: Florian Dold <florian@dold.me>
Date: Thu, 7 May 2026 21:19:43 +0200
consistently log to stderr in test unified setup
Since stdout is used for communication with the test parent binary,
writing to stdout gets silently discarded. Writing logs to stderr is
cleaner anyway.
Diffstat:
1 file changed, 100 insertions(+), 100 deletions(-)
diff --git a/src/testing/taler-unified-setup.sh b/src/testing/taler-unified-setup.sh
@@ -215,67 +215,67 @@ done
STAGE="init"
-echo "Starting with configuration file at: $CONF_ORIG"
+echo "Starting with configuration file at: $CONF_ORIG" >&2
CONF="$CONF_ORIG.edited"
cp "${CONF_ORIG}" "${CONF}"
STAGE="checks"
-echo -n "Testing for jq"
+echo -n "Testing for jq" >&2
jq -h > /dev/null || exit_skip " jq required"
echo " FOUND"
-echo -n "Testing for wget"
-wget --help > /dev/null || exit_skip " wget required"
+echo -n "Testing for wget" >&2
+wget --help > /dev/null || exit_skip " wget required" >&2
echo " FOUND"
if [ "1" = "$START_EXCHANGE" ]
then
- echo -n "Testing for Taler exchange"
+ echo -n "Testing for Taler exchange" >&2
taler-exchange-httpd -h > /dev/null || exit_skip " taler-exchange-httpd required"
echo " FOUND"
fi
if [ "1" = "$START_DONAU" ]
then
- echo -n "Testing for Donau"
+ echo -n "Testing for Donau" >&2
donau-httpd -h > /dev/null || exit_skip " donau-httpd required"
echo " FOUND"
fi
if [ "1" = "$START_MERCHANT" ]
then
- echo -n "Testing for Taler merchant"
+ echo -n "Testing for Taler merchant" >&2
taler-merchant-httpd -h > /dev/null || exit_skip " taler-merchant-httpd required"
echo " FOUND"
fi
if [ "1" = "$START_CHALLENGER" ]
then
- echo -n "Testing for Taler challenger"
+ echo -n "Testing for Taler challenger" >&2
challenger-httpd -h > /dev/null || exit_skip " challenger-httpd required"
echo " FOUND"
fi
if [ "1" = "$START_BACKUP" ]
then
- echo -n "Testing for sync-httpd"
+ echo -n "Testing for sync-httpd" >&2
sync-httpd -h > /dev/null || exit_skip " sync-httpd required"
- echo " FOUND"
+ echo " FOUND" >&2
fi
if [ "1" = "$START_NEXUS" ]
then
- echo -n "Testing for libeufin-nexus"
+ echo -n "Testing for libeufin-nexus" >&2
libeufin-nexus --help >/dev/null </dev/null || exit_skip " MISSING"
- echo " FOUND"
+ echo " FOUND" >&2
fi
if [ "1" = "$START_BANK" ]
then
- echo -n "Testing for libeufin-bank"
+ echo -n "Testing for libeufin-bank" >&2
libeufin-bank --help >/dev/null </dev/null || exit_skip " MISSING"
- echo " FOUND"
+ echo " FOUND" >&2
fi
STAGE="config"
@@ -298,7 +298,7 @@ else
fi
fi
-echo "Setting up for $CURRENCY"
+echo "Setting up for $CURRENCY" >&2
register_bank_account() {
wget \
@@ -385,25 +385,25 @@ STAGE="bank"
if [ "1" = "$START_BANK" ]
then
- echo -n "Setting up bank database ... "
+ echo -n "Setting up bank database ... " >&2
libeufin-bank dbinit \
-r \
-c "$CONF" \
-L "$LOGLEVEL" \
&> libeufin-bank-reset.log
- echo "DONE"
- echo -n "Launching bank ... "
+ echo "DONE" > &2
+ echo -n "Launching bank ... " >&2
libeufin-bank serve \
-c "$CONF" \
-L "$LOGLEVEL" \
> libeufin-bank-stdout.log \
2> libeufin-bank-stderr.log &
echo $! > libeufin-bank.pid
- echo "DONE"
- echo -n "Waiting for Bank ..."
+ echo "DONE" >&2
+ echo -n "Waiting for Bank ..." >&2
OK="0"
for n in $(seq 1 100); do
- echo -n "."
+ echo -n "." >&2
sleep "$DEFAULT_SLEEP"
wget --timeout=1 \
--tries=3 \
@@ -417,10 +417,10 @@ then
done
if [ "1" != "$OK" ]
then
- exit_skip "Failed to launch services (bank)"
+ exit_skip "Failed to launch services (bank)" >&2
fi
- echo "OK"
- echo -n "Set admin password..."
+ echo "OK" >&2
+ echo -n "Set admin password..." >&2
AUSER="admin"
APASS="secret-password"
libeufin-bank \
@@ -436,33 +436,33 @@ then
--debit_threshold="$CURRENCY:1000000" \
"$AUSER" \
&> libeufin-bank-debit-threshold.log
- echo " OK"
+ echo " OK" >&2
fi
if [ "1" = "$START_NEXUS" ]
then
- echo "Nexus currently not supported ..."
+ echo "Nexus currently not supported ..." >&2
fi
if [ "1" = "$START_FAKEBANK" ]
then
- echo -n "Setting up fakebank ..."
+ echo -n "Setting up fakebank ..." >&2
$USE_VALGRIND taler-fakebank-run \
-c "$CONF" \
-L "$LOGLEVEL" \
-n 4 \
2> taler-fakebank-run.log &
- echo " OK"
+ echo " OK" >&2
fi
if [[ "1" = "$START_BANK" || "1" = "$START_FAKEBANK" ]]
then
- echo -n "Waiting for the bank"
+ echo -n "Waiting for the bank" >&2
# Wait for bank to be available (usually the slowest)
OK="0"
for n in $(seq 1 300)
do
- echo -n "."
+ echo -n "." >&2
sleep "$DEFAULT_SLEEP"
# bank
wget --tries=1 \
@@ -481,14 +481,14 @@ then
then
exit_skip "Failed to launch services (bank)"
fi
- echo " OK"
+ echo " OK" >&2
fi
STAGE="accounts"
if [ "1" = "$START_FAKEBANK" ]
then
- echo -n "Register Fakebank users ..."
+ echo -n "Register Fakebank users ..." >&2
register_fakebank_account fortytwo password
register_fakebank_account fortythree password
register_fakebank_account exchange password
@@ -496,12 +496,12 @@ then
register_fakebank_account gnunet password
register_fakebank_account tutorial password
register_fakebank_account survey password
- echo " DONE"
+ echo " DONE" >&2
fi
if [ "1" = "$START_BANK" ]
then
- echo -n "Register bank users ..."
+ echo -n "Register bank users ..." >&2
# The specified IBAN and name must match the ones hard-coded into
# the C helper for the add-incoming call. Without this value,
# libeufin-bank won't find the target account to debit along a /add-incoming
@@ -513,14 +513,14 @@ then
register_bank_account gnunet password "GNUnet"
register_bank_account tutorial password "Tutorial"
register_bank_account survey password "Survey"
- echo " DONE"
+ echo " DONE" >&2
fi
STAGE="exchange"
if [ "1" = "$START_EXCHANGE" ]
then
- echo -n "Starting exchange ..."
+ echo -n "Starting exchange ..." >&2
EXCHANGE_PORT=$(taler-exchange-config -c "$CONF" -s EXCHANGE -o PORT)
SERVE=$(taler-exchange-config -c "$CONF" -s EXCHANGE -o SERVE)
if [ "${SERVE}" = "unix" ]
@@ -535,13 +535,13 @@ then
if [ ! -e "$MASTER_PRIV_FILE" ]
then
gnunet-ecc -g1 "$MASTER_PRIV_FILE" > /dev/null 2> /dev/null
- echo -n "."
+ echo -n "." >&2
fi
MASTER_PUB=$(gnunet-ecc -p "${MASTER_PRIV_FILE}")
MPUB=$(taler-exchange-config -c "$CONF" -s exchange -o MASTER_PUBLIC_KEY)
if [ "$MPUB" != "$MASTER_PUB" ]
then
- echo -n " patching master_pub ($MASTER_PUB)..."
+ echo -n " patching master_pub ($MASTER_PUB)..." >&2
taler-exchange-config -c "$CONF" -s exchange -o MASTER_PUBLIC_KEY -V "$MASTER_PUB"
fi
taler-exchange-dbinit \
@@ -562,14 +562,14 @@ then
$USE_VALGRIND taler-exchange-httpd \
-c "$CONF" \
-L "$LOGLEVEL" 2> taler-exchange-httpd.log &
- echo " DONE"
+ echo " DONE" >&2
fi
STAGE="donau"
if [ "1" = "$START_DONAU" ]
then
- echo -n "Starting Donau ..."
+ echo -n "Starting Donau ..." >&2
DONAU_PORT=$(donau-config -c "$CONF" -s DONAU -o PORT)
SERVE=$(donau-config -c "$CONF" -s DONAU -o SERVE)
if [ "${SERVE}" = "unix" ]
@@ -583,45 +583,45 @@ then
$USE_VALGRIND donau-secmod-rsa -c "$CONF" -L "$LOGLEVEL" 2> donau-secmod-rsa.log &
$USE_VALGRIND donau-secmod-cs -c "$CONF" -L "$LOGLEVEL" 2> donau-secmod-cs.log &
$USE_VALGRIND donau-httpd -c "$CONF" -L "$LOGLEVEL" 2> donau-httpd.log &
- echo " DONE"
+ echo " DONE" >&2
fi
STAGE="wirewatch"
if [ "1" = "$START_WIREWATCH" ]
then
- echo -n "Starting wirewatch ..."
+ echo -n "Starting wirewatch ..." >&2
$USE_VALGRIND taler-exchange-wirewatch \
--account="$USE_ACCOUNT" \
-c "$CONF" \
-L "$LOGLEVEL" \
--longpoll-timeout="60 s" \
2> taler-exchange-wirewatch.log &
- echo " DONE"
+ echo " DONE" >&2
fi
STAGE="aggregator"
if [ "1" = "$START_AGGREGATOR" ]
then
- echo -n "Starting aggregator ..."
+ echo -n "Starting aggregator ..." >&2
$USE_VALGRIND taler-exchange-aggregator \
-c "$CONF" \
-L "$LOGLEVEL" \
2> taler-exchange-aggregator.log &
- echo " DONE"
+ echo " DONE" >&2
fi
STAGE="transfer"
if [ "1" = "$START_TRANSFER" ]
then
- echo -n "Starting transfer ..."
+ echo -n "Starting transfer ..." >&2
$USE_VALGRIND taler-exchange-transfer \
-c "$CONF" \
-L "$LOGLEVEL" \
2> taler-exchange-transfer.log &
- echo " DONE"
+ echo " DONE" >&2
fi
STAGE="merchant"
@@ -632,16 +632,16 @@ then
MXPUB=${MASTER_PUB:-$(taler-exchange-config -c "$CONF" -s exchange -o MASTER_PUBLIC_KEY)}
if [ "$MEPUB" != "$MXPUB" ]
then
- echo -n " patching master_pub ($MXPUB)..."
+ echo -n " patching master_pub ($MXPUB)..." >&2
taler-merchant-config -c "$CONF" -s "${USE_MERCHANT_EXCHANGE}" -o MASTER_KEY -V "$MXPUB"
else
- echo -n " with exchange $MXPUB ..."
+ echo -n " with exchange $MXPUB ..." >&2
fi
fi
if [ "1" = "$START_MERCHANT" ]
then
- echo -n "Starting merchant ..."
+ echo -n "Starting merchant ..." >&2
MERCHANT_TYPE=$(taler-merchant-config -c "$CONF" -s MERCHANT -o SERVE)
if [ "unix" = "$MERCHANT_TYPE" ]
then
@@ -665,40 +665,40 @@ then
$USE_VALGRIND taler-merchant-webhook \
-c "$CONF" \
-L "$LOGLEVEL" 2> taler-merchant-webhook.log &
- echo " DONE"
+ echo " DONE" >&2
if [ "1" = "$START_MERCHANT_WIREWATCH" ]
then
- echo -n "Starting taler-merchant-wirewatch ..."
+ echo -n "Starting taler-merchant-wirewatch ..." >&2
$USE_VALGRIND taler-merchant-wirewatch \
-c "$CONF" \
-L "$LOGLEVEL" \
--persist \
2> taler-merchant-wirewatch.log &
- echo " DONE"
+ echo " DONE" >&2
fi
if [ "1" = "$START_MERCHANT_EXCHANGE" ]
then
- echo -n "Starting taler-merchant-exchange ..."
+ echo -n "Starting taler-merchant-exchange ..." >&2
$USE_VALGRIND taler-merchant-exchange \
-c "$CONF" \
-L "$LOGLEVEL" 2> taler-merchant-exchange.log &
- echo " DONE"
+ echo " DONE" >&2
fi
if [ "1" = "$START_DEPOSITCHECK" ]
then
- echo -n "Starting taler-merchant-depositcheck ..."
+ echo -n "Starting taler-merchant-depositcheck ..." >&2
$USE_VALGRIND taler-merchant-depositcheck \
-c "$CONF" \
-L "$LOGLEVEL" 2> taler-merchant-depositcheck.log &
- echo " DONE"
+ echo " DONE" >&2
fi
if [ "1" = "$START_MERCHANT_DONAUKEYUPDATE" ]
then
- echo -n "Starting taler-merchant-donaukeyupdate..."
+ echo -n "Starting taler-merchant-donaukeyupdate..." >&2
$USE_VALGRIND taler-merchant-donaukeyupdate \
-c "$CONF" \
-L "$LOGLEVEL" 2> taler-merchant-donaukeyupdate.log &
- echo " DONE"
+ echo " DONE" >&2
fi
fi
@@ -706,7 +706,7 @@ STAGE="sync"
if [ "1" = "$START_BACKUP" ]
then
- echo -n "Starting sync ..."
+ echo -n "Starting sync ..." >&2
SYNC_PORT=$(sync-config -c "$CONF" -s SYNC -o PORT)
SERVE=$(sync-config -c "$CONF" -s SYNC -o SERVE)
if [ "${SERVE}" = "unix" ]
@@ -720,14 +720,14 @@ then
-c "$CONF" \
-L "$LOGLEVEL" \
2> sync-httpd.log &
- echo " DONE"
+ echo " DONE" >&2
fi
STAGE="challenger"
if [ "1" = "$START_CHALLENGER" ]
then
- echo -n "Starting challenger ..."
+ echo -n "Starting challenger ..." >&2
CHALLENGER_PORT=$(challenger-config -c "$CONF" -s CHALLENGER -o PORT)
SERVE=$(challenger-config -c "$CONF" -s CHALLENGER -o SERVE)
if [ "${SERVE}" = "unix" ]
@@ -743,7 +743,7 @@ then
-c "$CONF" \
-L "$LOGLEVEL" \
2> challenger-httpd.log &
- echo " DONE"
+ echo " DONE" >&2
for SECTION in $(taler-exchange-config -c "$CONF" -S | grep kyc-provider)
do
LOGIC=$(taler-exchange-config -c "$CONF" -s "$SECTION" -o "LOGIC")
@@ -752,7 +752,7 @@ then
INFO=$(taler-exchange-config -c "$CONF" -s "$SECTION" -o "KYC_OAUTH2_INFO_URL")
if [ "${CHALLENGER_URL}info" = "$INFO" ]
then
- echo -n "Enabling Challenger client for $SECTION"
+ echo -n "Enabling Challenger client for $SECTION" >&2
CLIENT_SECRET=$(taler-exchange-config -c "$CONF" -s "$SECTION" -o "KYC_OAUTH2_CLIENT_SECRET")
RFC_8959_PREFIX="secret-token:"
if ! echo "${CLIENT_SECRET}" | grep ^${RFC_8959_PREFIX} > /dev/null
@@ -762,7 +762,7 @@ then
REDIRECT_URI="${EXCHANGE_URL}kyc-proof/kyc-provider-example-challeger"
CLIENT_ID=$(challenger-admin --add="${CLIENT_SECRET}" --quiet "${REDIRECT_URI}")
taler-exchange-config -c "$CONF" -s "$SECTION" -o KYC_OAUTH2_CLIENT_ID -V "$CLIENT_ID"
- echo " DONE"
+ echo " DONE" >&2
fi
fi
done
@@ -772,7 +772,7 @@ STAGE="auditor"
if [ "1" = "$START_AUDITOR" ]
then
- echo -n "Starting auditor ..."
+ echo -n "Starting auditor ..." >&2
export TALER_AUDITOR_SALT=$(taler-auditor-config -c "$CONF" -s AUDITOR -o TALER_AUDITOR_SALT)
@@ -783,13 +783,13 @@ then
if [ ! -e "$AUDITOR_PRIV_FILE" ]
then
gnunet-ecc -g1 "$AUDITOR_PRIV_FILE" > /dev/null 2> /dev/null
- echo -n "."
+ echo -n "." >&2
fi
AUDITOR_PUB=$(gnunet-ecc -p "${AUDITOR_PRIV_FILE}")
APUB=$(taler-exchange-config -c "$CONF" -s auditor -o PUBLIC_KEY)
if [ "$APUB" != "$AUDITOR_PUB" ]
then
- echo -n " patching auditor public key ..."
+ echo -n " patching auditor public key ..." >&2
# Using taler-exchange-config is correct here, we don't want to
# suddenly use the auditor-defaults while editing...
taler-exchange-config -c "$CONF" -s auditor -o PUBLIC_KEY -V "$AUDITOR_PUB"
@@ -798,18 +798,18 @@ then
taler-auditor-dbinit \
-c "$CONF" \
--reset
- echo "Launching auditor using $CONF" > taler-auditor-httpd.log
+ echo "Launching auditor using $CONF" > taler-auditor-httpd.log >&2
echo "Launching auditor using $AUDITOR_PUB from $AUDITOR_PRIV_FILE" \
>> taler-auditor-httpd.log
$USE_VALGRIND taler-auditor-httpd \
-L "$LOGLEVEL" \
-c "$CONF" 2>> taler-auditor-httpd.log &
- echo " DONE"
+ echo " DONE" >&2
fi
STAGE="wait"
-echo -n "Waiting for Taler services ..."
+echo -n "Waiting for Taler services ..." >&2
# Wait for all other taler services to be available
E_DONE=0
D_DONE=0
@@ -823,7 +823,7 @@ do
OK="0"
if [ "0" = "$E_DONE" ] && [ "1" = "$START_EXCHANGE" ]
then
- echo -n "E"
+ echo -n "E" >&2
wget \
--tries=1 \
--timeout=1 \
@@ -834,7 +834,7 @@ do
fi
if [ "0" = "$D_DONE" ] && [ "1" = "$START_DONAU" ]
then
- echo -n "D"
+ echo -n "D" >&2
wget \
--tries=1 \
--timeout=1 \
@@ -845,7 +845,7 @@ do
fi
if [ "0" = "$M_DONE" ] && [ "1" = "$START_MERCHANT" ]
then
- echo -n "M"
+ echo -n "M" >&2
wget \
--tries=1 \
--timeout=1 \
@@ -856,7 +856,7 @@ do
fi
if [ "0" = "$S_DONE" ] && [ "1" = "$START_BACKUP" ]
then
- echo -n "S"
+ echo -n "S" >&2
wget \
--tries=1 \
--timeout=1 \
@@ -867,7 +867,7 @@ do
fi
if [ "0" = "$K_DONE" ] && [ "1" = "$START_CHALLENGER" ]
then
- echo -n "K"
+ echo -n "K" >&2
wget \
--tries=1 \
--timeout=1 \
@@ -878,7 +878,7 @@ do
fi
if [ "0" = "$A_DONE" ] && [ "1" = "$START_AUDITOR" ]
then
- echo -n "A"
+ echo -n "A" >&2
wget \
--tries=1 \
--timeout=1 \
@@ -894,16 +894,16 @@ if [ 1 != "$OK" ]
then
exit_skip "Failed to launch (some) Taler services (E: $E_DONE, M: $M_DONE, S: $S_DONE, K: $K_DONE, A: $A_DONE, D: $D_DONE)"
fi
-echo " OK"
+echo " OK" >&2
if [ "1" = "$START_EXCHANGE" ]
then
- echo -n "Wait for exchange /management/keys to be ready "
+ echo -n "Wait for exchange /management/keys to be ready " >&2
OK="0"
LAST_RESPONSE=$(mktemp tmp-last-response.XXXXXXXX)
for n in $(seq 1 10)
do
- echo -n "."
+ echo -n "." >&2
sleep "$DEFAULT_SLEEP"
# exchange
wget \
@@ -923,9 +923,9 @@ then
exit_fail "Failed to setup exchange keys, check secmod logs"
fi
rm "$LAST_RESPONSE"
- echo " OK"
+ echo " OK" >&2
- echo -n "Setting up exchange keys ..."
+ echo -n "Setting up exchange keys ..." >&2
rm -f test_exchange_api_home/.local/share/taler-exchange/offline/secm_tofus.pub
NEXT_YEAR=$(expr 1 + $(date +%Y))
taler-exchange-offline -c "$CONF" \
@@ -936,34 +936,34 @@ then
global-fee now "$CURRENCY:0.01" "$CURRENCY:0.01" "$CURRENCY:0.0" 1h 1year 5 \
global-fee "$NEXT_YEAR" "$CURRENCY:0.01" "$CURRENCY:0.01" "$CURRENCY:0.0" 1h 1year 5 \
upload &> taler-exchange-offline.log
- echo "OK"
+ echo "OK" >&2
ENABLED=$(taler-exchange-config -c "$CONF" -s "$USE_ACCOUNT" -o "ENABLE_CREDIT")
if [ "YES" = "$ENABLED" ]
then
- echo -n "Configuring bank account $USE_ACCOUNT ..."
+ echo -n "Configuring bank account $USE_ACCOUNT ..." >&2
EXCHANGE_PAYTO_URI=$(taler-exchange-config -c "$CONF" -s "$USE_ACCOUNT" -o "PAYTO_URI")
taler-exchange-offline -c "$CONF" \
enable-account "$EXCHANGE_PAYTO_URI" \
upload &> "taler-exchange-offline-account.log"
- echo " OK"
+ echo " OK" >&2
else
- echo "WARNING: Account ${USE_ACCOUNT} not enabled (set to: '$ENABLED')"
+ echo "WARNING: Account ${USE_ACCOUNT} not enabled (set to: '$ENABLED')" >&2
fi
if [ "1" = "$START_AUDITOR" ]
then
- echo -n "Enabling auditor ..."
+ echo -n "Enabling auditor ..." >&2
taler-exchange-offline -c "$CONF" \
enable-auditor "$AUDITOR_PUB" "$AUDITOR_URL" "$CURRENCY Auditor" \
upload &> taler-exchange-offline-auditor.log
- echo "OK"
+ echo "OK" >&2
fi
- echo -n "Checking /keys "
+ echo -n "Checking /keys " >&2
OK="0"
LAST_RESPONSE=$(mktemp tmp-last-response.XXXXXXXX)
for n in $(seq 1 10)
do
- echo -n "."
+ echo -n "." >&2
sleep "$DEFAULT_SLEEP"
wget \
--tries=1 \
@@ -982,46 +982,46 @@ then
exit_fail " Failed to fetch ${EXCHANGE_URL}keys"
fi
rm "$LAST_RESPONSE"
- echo " OK"
+ echo " OK" >&2
fi
if [ "1" = "$START_AUDITOR" ]
then
- echo -n "Setting up auditor signatures ..."
+ echo -n "Setting up auditor signatures ..." >&2
timeout 15 taler-auditor-offline -c "$CONF" \
download \
sign \
upload &> taler-auditor-offline.log
- echo " OK"
+ echo " OK" >&2
- echo -n "Starting helpers "
+ echo -n "Starting helpers " >&2
$USE_VALGRIND taler-helper-auditor-coins \
-L "$LOGLEVEL" \
-c "$CONF" 2> taler-helper-auditor.log &
- echo -n "."
+ echo -n "." >&2
$USE_VALGRIND taler-helper-auditor-reserves \
-L "$LOGLEVEL" \
-c "$CONF" 2> taler-helper-auditor.log &
- echo -n "."
+ echo -n "." >&2
$USE_VALGRIND taler-helper-auditor-purses \
-L "$LOGLEVEL" \
-c "$CONF" 2> taler-helper-auditor.log &
- echo -n "."
+ echo -n "." >&2
$USE_VALGRIND taler-helper-auditor-aggregation \
-L "$LOGLEVEL" \
-c "$CONF" 2> taler-helper-auditor.log &
- echo -n "."
+ echo -n "." >&2
$USE_VALGRIND taler-helper-auditor-deposits \
-L "$LOGLEVEL" \
-c "$CONF" 2> taler-helper-auditor.log &
- echo -n "."
+ echo -n "." >&2
- echo " OK"
+ echo " OK" >&2
fi