su에게 비밀번호를 여러 번 요청하게 함

su에게 비밀번호를 여러 번 요청하게 함

su비밀번호가 잘못된 경우 비밀번호를 다시 물어볼 수 있는 방법이 있나요 sudo?

처음에 나는 이렇게 생각했다.

while ! su -c foo; do
  read -n 1 -p "Retry(y/n)?" ch
  if [[ "$ch" != "y" ]]; then
    break
  fi
done

그러나 foo어떤 경우에는 1을 반환하기도 하므로 잘못된 비밀번호를 입력했는지, 아니면 실패했는지 감지할 수 없습니다 foo.

답변1

해결 방법으로 다음을 제안합니다.

#!/bin/bash
while ! su -c "foo; exit 0"; do
    read -n 1 -p "Retry? (y/n) " ch
    [[ "$ch" != "y" ]] && break   # This does the same in fewer lines
done

foo종료 코드가 다르 더라도 0 값을 반환합니다 .
경고:foo이 해결 방법(약간 보기 흉함)을 사용하면 의 종료 코드를 확인할 수 없습니다 . 귀하의 프로젝트에 필요한지 모르겠습니다.

답변2

su인증 실패 시 1을 반환하므로 이 오류 코드를 방지하도록 명령을 준비하세요. 예를 들어 상태 값 126과 127을 병합하는 데 관심이 없다면 다음과 같이 하세요.

while
  su -c 'foo; ret=$?; if [ "$ret" -ge 1 ] && [ "$ret" -le 126 ]; the ret=$((ret+1)); fi'
  ret=$?
  [ ret -ne 1 ]
do
done
if [ "$ret" -ge 2 ] && [ "$ret" -le 126 ]; then ret=$((ret-1)); fi
echo "foo returned $ret" # or maybe 126 if this shows 127

관련 정보