LexxXell
@LexxXell
Программист и немного IT-журналист

Как вывести строку в консоль при обратном вызове?

Имеется код
request_password() {
  local password
  while true; do
    read -rs -p "Password: " password
    [ -z "$password" ] && printf "\rPassword cannot be empty. Please try again. " || break
  done
  printf "\r\033[K"
  echo $password
}

# Пример прямого вызова
request_password

# Пример обратного вызова
password=$(request_password)
echo "Your password is: $password"


При обратном вызове функция работает некорректно, т.к. вывод
printf "\rPassword cannot be empty. Please try again. "
идёт в "подоболочку" и не отображается в консоли. Как это исправить?
  • Вопрос задан
  • 60 просмотров
Решения вопроса 2
@AUser0
Чем больше знаю, тем лучше понимаю, как мало знаю.
А если так?
[ -z "$password" ] && printf "\rPassword cannot be empty. Please try again. " >&2 || break
Ответ написан
saboteur_kiev
@saboteur_kiev Куратор тега bash
software engineer
Юзайте код возврата из функции для проверки что в ней случилось что-то неладное
request_password() {
  local password
  while true; do
    read -rs -p "Password: " password
    [ -z "$password" ] && echo "Password cannot be empty. Please try again. " && return 1 || break
  done
  echo $password
}

# Пример прямого вызова
request_password

# Пример обратного вызова
password=$(request_password)
if [ $? -ne 0 ]; then
  echo "Password cannot be empty. Please try again. "
else
  echo "Your password is: $password"
fi
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы