我正在寻找一种将需要 sudo 的工作置于后台的方法,除了输入密码之外,尽可能少地进行交互。
sudo 需要来自终端的密码,而后台作业将放弃终端:
$ sudo sleep 10 &
[1] 32749
$ fg 1
sudo sleep 10
[sudo] password for t:
我当前的解决方案就像上面输入我的密码,然后bg 1
再次进行工作。它需要我交互地执行三个命令
sudo 仅适用于可执行文件,不适用于 shell 特定命令:
$ sudo ( sleep 10 & )
bash: syntax error near unexpected token `sleep'
$ sudo { sleep 10 & }
bash: syntax error near unexpected token `}'
以下方法会将后台作业与外壳分离,这是不希望的:
$ sudo bash -c "sleep 10 & "
[sudo] password for t:
$ jobs
$
我也可以集中精力sudo
。例如,在 sudoers 中创建命令 NOPASSWD,或者通过在实际后台 sudo 命令之前运行虚拟 sudo 命令来利用密码缓存。我不确定它们是否是优雅的方式。让我知道其中是否有。
答案1
我用sudo -v
它来作为你的“在实际后台 sudo 命令之前的虚拟 sudo 命令”;这须藤手册页给出这个:
通过使用 -v 选项运行 sudo,用户可以更新缓存的凭据,而无需运行命令。
这并不要求用户拥有任何其他 sudo 授予的命令来充当“虚拟”sudo 命令。
答案2
我认为你的最后一段是解决这个问题的方法。如果禁用密码要求是适当的,那么请务必使用 来配置该命令NOPASSWD
。否则,如果您sudo
允许缓存凭据(默认情况下会这样做),您可以提前进行设置:
sudo -v
sudo sleep 10 &