Zsh 运行多个sudo';d同时执行命令

Zsh 运行多个sudo';d同时执行命令,zsh,sudo,Zsh,Sudo,我又一次被过时的藏品咬了。我终于厌倦了查找所有缓存重建命令,并决定为自己编写一个简短的zsh函数来完成我所知道的所有命令(当我发现更多命令时,可以在这里使用)。以下是我目前掌握的情况: recache() { sudo true sudo updatedb & local updatedbpid=$! sudo ldconfig & local ldconfigpid=$! rehash wait $updatedbpid

我又一次被过时的藏品咬了。我终于厌倦了查找所有缓存重建命令,并决定为自己编写一个简短的zsh函数来完成我所知道的所有命令(当我发现更多命令时,可以在这里使用)。以下是我目前掌握的情况:

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
}