讓 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有不同的退出代碼,這也會傳回零值。
警告:使用此解決方法(有點難看),您將無法確定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

相關內容