Bash 脚本以 sudo 密码作为变量打开新的 gnome 终端

Bash script opening new gnome-terminal with sudo password as variable

我正在编写一个脚本来使我的系统保持最新。在脚本中,我打开了一个新的 gnome-terminal 以在那里执行代码,因为我确实想要输出,但不是在我的主终端中 window。但是,我似乎无法使用 sudo 密码。这是我的脚本:

echo "Please provide me with your SUDO password"
#make password variable for later use. 
read password 

echo "Updating your package information.."
gnome-terminal --quiet --wait -- echo "$password" | sudo -S apt-get update
echo "Command executed."

echo -e "Upgrading packages.."
#etc..

当我只是在 'new' 终端中回显密码时它确实有效,我可以很好地看到密码(或任何变量)。然而,上面的结果总是 sudo: no password was provided.

我不想禁用我的 sudo 密码,并且执行的命令必须在新的 window.

我不使用 gnome,而且它显然没有官方手册页。 Debian 添加的 man page 或 Ubuntu 不是最新的。似乎建议您需要使用 -e 将命令作为单个字符串提供,askubuntu 上的示例显示它在 2010 年显然有效。

最近,可以使用 -x,然后它会占用该行的其余部分,但是由于您的命令中有管道 |,您可能需要改为:

... -x bash -c "printf '%s\n' '$password' | sudo -S apt-get update"

假设 ' 不在您的密码中。 (如果密码中有特殊字符,printf 优于 echo)。

您可能更愿意在环境中传递密码:

PW="$password" gnome-terminal ... -x bash -c 'printf "%s\n" "$PW" | sudo -S apt-get update'

正如您评论的那样,-e-x 现已弃用,命令应在 -- 之后传递,如:

PW="$password" gnome-terminal ... -- bash -c 'printf "%s\n" "$PW" | sudo -S apt-get update'