在BASH脚本中扩展SUDO时间戳

时间:2015-11-12 03:35:01

标签: macos bash timestamp sudo

有一个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 &

以上代码可以工作吗?

2 个答案:

答案 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
  • -n非交互式
  • -v尝试刷新权限

如果sudo权限仍可用于当前上下文,则此命令将不输出任何内容。如果它们不可用,则命令将输出:

$ sudo -nv
sudo: a password is required

这样它就不会问,你可以围绕这些输出条件构建你的脚本。