如何在后台运行询问密码的命令?

如何在后台运行询问密码的命令?

我想运行一个命令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。此函数定义可能有更好的位置。

相关内容