У меня есть цикл, который будет запрашивать пароль sudo
пока он не получит его правильно. Почему это не актуально, скажем так, это часть большого скрипта, а другие решения не подходят.
until sudo -n true 2> /dev/null; do
read -s -p "Password:" sudo_password
sudo -S -v <<< "${sudo_password}" 2> /dev/null
done
Это работает очень хорошо. Тем не менее, он не работает, когда в скобках
until [[ $(sudo -n true 2> /dev/null) ]]; do
read -s -p "Password:" sudo_password
sudo -S -v <<< "${sudo_password}" 2> /dev/null
done
Я попробовал это множеством способов, и с петлями, и с условными. Я даже зашел так далеко
until [[ $(sudo -n true 2> /dev/null; echo "$?") -ne 0 ]]; do
read -s -p "Password:" sudo_password
sudo -S -v <<< "${sudo_password}" 2> /dev/null
# check exit status is indeed 0
sudo -n true 2> /dev/null
echo "$?"
done
Это тоже не работает, и я не понимаю, почему. На самом деле, этот случай всегда возвращает 0
(в соответствии с последним echo "$?"
) даже если пароль неправильный, но он никогда не выпадает из цикла, даже если пароль правильный, что еще более странно.
Редактировать: Просто понял, почему последний не работает, в то время как в других случаях. С этим конкретным сравнением, это должно было быть какое- while
, а не until
.