有一个BASH脚本可能需要超过5分钟来运行一个命令列表(大多数是sudo)......有什么替代方案?
有人说......
使用sudo -v
似乎是一个不错的选择,但在阅读了Apple的sudo(8) Man Page后,有人说......
如果给出-v(验证)选项,sudo将更新用户的时间戳,提示输入 必要时用户的密码。这将sudo超时延长了5分钟 (或sudoers中设置的超时)但不运行命令。
我担心在必要时提示输入用户密码。他们的意思是“必要时”?
如果我在bash脚本中有sudo -v,那么说,自上次使用sudo以来大约需要4分钟(时间戳还剩1分钟)。因此,给我们另外5分钟的时间戳 - 对吧?
至于另一个选项,有人提到使用循环命令来更新时间戳。
while true; do sudo -n true; sleep 60; kill -0 "$$" || exit; done 2>/dev/null &
以上代码可以工作吗?
答案 0 :(得分:0)
我回答自己的问题可能会迟到,但我确实找到了解决方案。
将 userpassword 替换为您的密码:
echo "userpassword" | sudo -S -v
使用变量:
echo "$var" | sudo -S -v
或
如果超过5分钟,请使用 while循环:
while true; do sudo -v; sleep 300; kill -0 "$$" || exit; done 2>/dev/null &
答案 1 :(得分:0)
使用以下内容:
sudo -nv
如果sudo权限仍可用于当前上下文,则此命令将不输出任何内容。如果它们不可用,则命令将输出:
$ sudo -nv
sudo: a password is required
这样它就不会问,你可以围绕这些输出条件构建你的脚本。