Вы должны понимать, что переменные оболочки должны быть правильно экранированы , прежде чем использовать их в условных выражениях или присваиваниях внутри ssh
в двойных кавычках.В противном случае переменные будут расширяться даже до того, как команды будут выполнены на удаленном компьютере.Таким образом, в вашем случае, независимо от того, увеличиваете ли вы c
или нет, переменная не расширяется, а условие на удаленном компьютере всегда остается таким же, как показано ниже.
if [[ 1 -gt 5 ]]; then
break
fi
Также expr
в значительной степени устарело, используйтетрадиционное приращение цикла в стиле C с использованием ((..))
as и экранирование всех вызовов переменной внутри, чтобы отложить расширение переменной
ssh root@$CHEF_SERVER "
until [[ 1 -eq 2 ]]; do
((c = c+1))
echo "Incremented value: \$c"
if [[ \$c -gt 5 ]]; then
break
fi
sleep 2
done"