我在制作一个小工具时使用 kdialog,现在我遇到了这个问题。有一个或多个组合函数需要连续 3 或 4 次 sudo。所以必须输入这么多次真的很烦人。
我想使用 kdialog --password 来存储我的 sudo 密码,每次打开应用程序时,它都会存储在一个变量中。这样它就不会放在文件或其他地方。无论如何,我可以看到它存储了,只需找到我可以回显 $passwrd。但我不知道如何在终端要求时将其输入到终端中。这可能吗?如果可以,如何操作,即使采用不同的方法。如果不是,kdialog --password 的实际用途是什么?如果你不能这样做,那么它真的没什么用处。
谢谢。
答案1
答案2
对话
使用 KDE 对话框进行开发/教程/Shell 脚本:http://techbase.kde.org/Development/Tutorials/Shell_Scripting_with_KDE_Dialogs
Example 6: Password Dialog Using a Shell Variable
Instead of saving the result in a file, you can also use a shell
variable. Note that you need to use the "backtick" notation - this key
is normally found on the top left of English (British or American)
layout keyboards, above the "7" key on French layout keyboards, and on
the top right of German layout keyboards.
password=`kdialog --password "Enter the password"`
答案3
sudo -S
用途:从标准输入读取密码而不是使用终端设备。
- 使用设置 PASSWRD 变量
kdialog --password
与命令替换$()
评估表达式
PASSWRD=$(kdialog --password "Enter password to start: ")
- 如果未设置 PASSWRD,退出程序
[[ -z "$PASSWRD" ]] && { echo "No Password, exiting... " ; exit 1; }
- 使用管道将 PASSWRD 传输到 sudo,并为每个命令设置
-S
或开关,--stdin
提示将写入标准错误
echo "$PASSWRD" | sudo -S dnf -y groupinstall "C Development Tools and Libraries"
echo "$PASSWRD" | sudo -S dnf --nogpgcheck -y install https://download1.rpmfusion.org/free/fedora/rpmfusion-free-release-$(rpm -E %fedora).noarch.rpm https://download1.rpmfusion.org/nonfree/fedora/rpmfusion-nonfree-release-$(rpm -E %fedora).noarch.rpm
- 明确地取消设置PASSWRD 变量
unset PASSWRD
这例子使用以下命令在 Fedora 上安装 Nvidia 驱动程序和一些附加功能:
kdialog --password
&kdialog --progressbar