我想运行一个命令sudo apt-get update &
。但是,按下回车键后,当我按下 时jobs
,它显示这些命令的状态为已停止。我猜是通过将进程推入后台,我没有给它提供询问密码的机会。有没有办法在后台运行需要密码的进程?
答案1
尝试sudo -i
先输入 end 然后apt-get update &
或者直接运行命令:
sudo -i && apt-get update &
您还可以尝试以下命令:
gksudo && sudo apt-get update &
但我不确定这是否有效。
或者您可以尝试将您的用户添加到使用 sudo 时不需要输入密码的用户列表中。
为此,请
sudo visudo
在终端中添加类型。然后添加以下行
%super_sudoers ALL=(ALL) NOPASSWD: ALL
或者无论你想如何称呼该组(你可以更改“super_sudoers”),然后通过键入以下内容将您的用户添加到该组
usermod -a -G super_sudoers yourusername
(显然用你的用户名替换你的用户名)
然后重新启动(或者也许注销/登录有效,不确定)你会发现你可以输入 suo 命令而不需要输入密码。当然,这意味着其他人也可以输入 suo 命令,所以确保你总是把电脑锁起来,不启用自动登录。
答案2
首先,“这不是最佳做法”。
但您可以使用命令sudo -S
sudo-s:
-S(stdin)选项使 sudo 从标准输入而不是终端设备读取密码。
因此,转到终端并输入:
echo 'yourpassword' | sudo -S apt-get update 1>> /home/user/myaptupd.log 2>&1 &
它将运行命令 apt-get update 而不提示输入密码和背景,
并将 stdout 和 stderr 重定向(附加)到您家中名为的日志文件日志,以防万一您可以使用 apt-get update 命令检查一切是否正常。
因为这是一个很大的命令,你可以把这个命令作为一个别名在你的 .bashrc 文件中。例如:在终端中输入:
gedit /home/user/.bashrc
将此行添加到文件末尾
alias myaptupd='echo 'yourpassword' | sudo -S apt-get update 1>> /home/user/myaptupd.log 2>&1 &'
重新加载你的 .bashrc
在终端中转到你的主目录只需输入:
cd
然后输入:
source .bashrc
或者
. .bashrc
现在在终端中只需输入别名作为命令:
myaptupd
您可以使用命令检查jobs
状态。
另一方面,您可以创建一个 bash 脚本并命名为 myaptupd.sh
例如:
#! /bin/bash
echo 'yourpassword' | sudo -S apt-get update 1>> /home/user/myaptupd.log 2>&1 &
为了安全起见,您可以将权限设置为:
chmod 700 /path/to/the/myaptupd.sh
然后你可以使用以下命令调用该脚本:
bash /path/to/the/myaptupd.sh
或者在 .bashrc 中创建一个别名
alias myaptupd='bash /path/to/the/myaptupd.sh'
重新加载你的 .bashrc(就像之前解释的那样)您可以输入别名来运行该脚本:
myaptupd
希望这会有所帮助!
问候。
答案3
最佳且安全的方法是:
su -c "sudo apt-get update &"
您还可以将输出传输到日志文件:
su -c "sudo apt-get update > update.log &"
答案4
我将以下内容添加到我的 .bash_profile 文件中。
sudobg() {
sudo echo "Password entered"
sudo $@ &
}
然后我可以简单地调用:
prompt$ sudobg echo "Hello from the background."
我得到:
Password:
Password entered
[1] 6773
prompt$ Hello from the background.
免责声明:我使用的是 bash,而不是 Ubuntu。此函数定义可能有更好的位置。