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'
我正在编写一个脚本来使我的系统保持最新。在脚本中,我打开了一个新的 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'