我需要使用sudo执行命令,并希望显示一个对话窗口供用户输入其凭据。尝试使用Applescript自定义提示简直令人难以忍受,使用内置的“使用管理员权限执行shell脚本”不允许自定义窗口,以便用户知道请求的来源。
当然,有一种方法可以显示一个窗口,让用户输入他们的凭据并将值发送回sudo来执行命令? cocoasudo看起来很有希望,但它也在提示窗口中写了“cocoasudo”,我需要用我的应用程序名称替换它。有没有人找到实现这种功能的解决方案?
答案 0 :(得分:4)
构建自定义窗口超出了基本AppleScript的范围。如果你需要,你需要扩展你的编程技巧。您需要学习如何利用Apple为创建窗口等提供的工具。最重要的是,您需要学习AppleScriptObjC或Objective-C / Cocoa API以及如何在Xcode中使用它们。
话虽如此,如果你不学习新东西,那么使用你拥有的工具。这样的东西会起作用。您可以自定义图标,按钮,文本等,甚至可以有一个隐藏的答案来保护用户输入密码。如果没有进一步的学习,你可以用Applescript做很多事情......
display dialog "OSAScript will need an Admin User name and password in order to make your changes." & return & return & "Please enter an admin username." default answer "" with icon 2
set username to text returned of result
display dialog "OSAScript will need an Admin User name and password in order to make your changes." & return & return & "Please enter an admin password." default answer "" with icon 2 with hidden answer
set pssword to text returned of result
do shell script "osascript -e \"return 1\"" user name username password pssword with administrator privileges
答案 1 :(得分:1)
此外,请注意,一旦使用sudo进行身份验证,您就不需要在接下来的五分钟内再次提供密码。这并不能直接解决您的问题,但它为您与用户交互的方式提供了更多选择。 sudo的-n选项阻止它提示输入密码(命令运行,或者sudo退出并显示错误)。
您可以将-n与-A选项结合使用,这会导致sudo运行一个单独的程序,其唯一的工作是收集和输出密码。这会让你使用AppleScript更好地做你想做的事吗?
答案 2 :(得分:0)
如果您熟悉Javascript,可以使用节点的sudo-prompt
模块使用sudo
运行命令,并在必要时使用对话框窗口进行提示。该对话框是操作系统引发的本机提示,因此用户的密码永远不会暴露给您的应用程序。您还可以在macOS上提供应用程序的名称和图标。该模块也适用于Windows和Linux。