gpt4 book ai didi

bash - 取消 sudo askpass 请求

转载 作者:行者123 更新时间:2023-12-05 07:30:30 24 4
gpt4 key购买 nike

我试图通过将 SUDO_ASKPASS 导出到具有以下行的脚本来在 bash 脚本中将 kdialog 与 sudo 结合使用

kdialog --password "enter password: " 

并使用 sudo -A。这很好用,除了如果我在对话框中单击取消,sudo 会忽略它,并在延迟后重试密码输入。单行脚本以 kdialog 的退出状态退出,如果单击取消,则退出状态为非零。

有没有什么办法可以说服 sudo 放弃,就像在文本界面中输入 control-C 一样?

编辑 - 最终我弄清楚了发生了什么。如果您单击取消,kdialog 将输出一个换行符。 Sudo --askpass 将此解释为空密码,并开始处理错误密码。如果单击取消,askpass 脚本不得发出该换行符。一种方法是

pe=$(kdialog --password 'enter password: ') && echo "$pe"

最佳答案

为此,经过几次尝试,我现在对 SUDO_ASKPASS 脚本使用以下解决方法:

#!/bin/bash

kdialog --password 'Enter password: ' || kill -9 "${PPID}"

如果用户选择取消,则调用进程(sudo 命令)被终止。

如果您直接从命令行调用脚本,为了降低错误终止您自己的进程的风险,您可以对其进行强化:

#!/bin/bash

kdialog --password 'Enter password: ' || [ ! -z ${DIE_ON_CANCEL+x} ] && kill -9 "${PPID}"

然后,如果您想在取消时终止进程,必须像这样显式定义 DIE_ON_CANCEL 变量:

SUDO_ASKPASS='<your script>' DIE_ON_CANCEL=true sudo --askpass <your command here>

我不喜欢使用kill,但我没有看到任何其他解决方案。有人有更好的主意吗?

关于bash - 取消 sudo askpass 请求,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52242131/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com