繁体   English   中英

在BASH脚本中扩展SUDO时间戳

[英]Extending SUDO timestamp in a BASH script

有一个BASH脚本可能需要5分钟以上的时间来运行命令列表(多数为sudo)...还有什么选择?

有人说...

使用sudo -v

似乎是一个不错的选择,尽管在阅读了苹果的sudo(8)手册页之后 ,据说...

如果提供-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 &

上面的代码可以工作吗?

但是,我确实回答了我自己的问题,但是找到了解决方案。

您的密码替换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 &

使用以下内容:

sudo -nv
  • -n非交互式
  • -v尝试刷新特权

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

$ sudo -nv
sudo: a password is required

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM