Zsh 运行多个sudo';d同时执行命令
我又一次被过时的藏品咬了。我终于厌倦了查找所有缓存重建命令,并决定为自己编写一个简短的zsh函数来完成我所知道的所有命令(当我发现更多命令时,可以在这里使用)。以下是我目前掌握的情况:Zsh 运行多个sudo';d同时执行命令,zsh,sudo,Zsh,Sudo,我又一次被过时的藏品咬了。我终于厌倦了查找所有缓存重建命令,并决定为自己编写一个简短的zsh函数来完成我所知道的所有命令(当我发现更多命令时,可以在这里使用)。以下是我目前掌握的情况: recache() { sudo true sudo updatedb & local updatedbpid=$! sudo ldconfig & local ldconfigpid=$! rehash wait $updatedbpid
recache() {
sudo true
sudo updatedb &
local updatedbpid=$!
sudo ldconfig &
local ldconfigpid=$!
rehash
wait $updatedbpid $ldconfigpid
}
第一个sudo true
用于确保sudo
具有最近的时间戳,以便以下后台进程不会暂停输入等待我键入密码。我不使用sudo-b
,因为我想等到缓存更新后再继续工作
大多数情况下,这很有效;但大约三分之一的时间里,我会收到无数份以下文本:
[2] + suspended (tty output) sudo updatedb
为什么??我能做些什么来修复它呢?所以我从来没有弄清楚为什么会发生这种情况。我最好的猜测是有一些sudo
试图锁定的资源,而sudo
的两次调用也在争夺它。在任何情况下,我已经使用以下修改的recache
函数一段时间了,没有遇到任何问题。主要区别在于只有一个后台sudo
,它并行运行updatedb
和ldconfig
,而不是每个进程运行一个后台sudo
recache() {
sudo true
sudo zsh -c 'updatedb & ldconfig & wait' &
local pid=$!
rehash
wait $pid
}