我有一个长时间运行的 Bash 脚本,我不想以 root 身份运行,但它需要在整个过程中定期进行 root 访问。我通过要求用户输入 root 密码解决了这个问题
sudo -v
Run Code Online (Sandbox Code Playgroud)
然后我背景了一个进程,该进程将使用循环并重置 sudo 计时器
sudo -n true
Run Code Online (Sandbox Code Playgroud)
然后我read
在主进程中使用时开始遇到奇怪的问题。这是一个展示此问题的最小脚本。如果您运行它并且在sudo -n true
运行之前不输入任何内容,则读取将获得read error: 0: Resource temporarily unavailable
#!/usr/bin/env bash
sudo -v # ask user for password
sleep 1 && sudo -n true & # background a process to reset sudo
printf "Reading text: "
read -n 1 TEXT
echo "Read text: $TEXT"
Run Code Online (Sandbox Code Playgroud)
除了sudo
. 如何sudo -n true
在不干扰的情况下在后台运行read
?
编辑:
我只在 Ubuntu 上遇到这个问题,而不是 macOS。