有沒有辦法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