リモートホストにSSHで接続するスクリプトを作成し、コマンドを実行し、出力をファイルに保存し、出力を調べました。ただし、(( success++ ))
配列の最初の項目を繰り返すと常に自動的に終了しますworkers
。(( success++ ))
に置き換えるとecho "process $worker"
正常に動作し、すべてのホストを印刷します。私は何が間違っているのかわかりません。
#!/bin/bash
set -x
set -e
workers=('host-1' 'host-2' 'host-3')
output_dir=$(mktemp -d)
for worker in ${workers[@]}; do
ssh $worker '
echo abc
echo OK
' > "$output_dir/$worker" &
done
echo "waiting..."
sleep 3
wait
success=0
regexp='OK$'
for worker in ${workers[@]}; do
output=`cat "$output_dir/$worker"`
if [[ "$output" =~ $regexp ]]; then
(( success++ ))
fi
done
echo "Total ${#workers[@]}; success: $success; failure: $((${#workers[@]} - success))"
ベストアンサー1
簡単な例では、その理由を説明できます。
$ ((success++))
$ echo $?
1
なぜならゼロ値を生成するすべての算術演算1を返す。何を言うべきかわかりません。 Bashは世界に十分な落とし穴をもたらしました。