Прежде всего, не думайте, что sh
и bash
одинаковы. В большинстве случаев это не так, и даже bash
будет вести себя по-разному, когда вызывается как sh
.
. В настоящее время ваше условие until
всегда оценивается как true
, поскольку выражение считается просто ненулевая строка. Для демонстрации:
$ [ ==OK ] && echo yo
yo
Помните, что [
является псевдонимом для /bin/test
. Вы можете man test
для документирования, но краткий ответ таков: используйте одинаковые равенства и пробелы вокруг всего. Да, и процитируйте переменные , а не константы без специальных символов.
Кроме того, следите за своими кавычками. Вы начинаете строку с двойными кавычками перед until
, а затем заканчиваете ее до OK
. Если вы хотите встроить двойные кавычки в двойные кавычки, вам нужно их избежать. Но еще лучше / яснее, если вы можете избежать их.
Возможно, это:
# bash -c 'until [[ "$response" = OK ]]; do response="$(printf "AUTH %s\r\n" "$redis_pw" | nc -w5 <redis IP> <redis port> )"; echo "$response"; done'
Или если вы предпочитаете быть POSIXy и не зависеть от bash:
# sh -c 'until [ "$response" = OK ]; do response="$(printf "AUTH %s\r\n" "$redis_pw" | nc -w5 <redis IP> <redis port>)"; echo "$response"; done'