有没有办法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