让 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

相关内容