在OS X中的Bash脚本中,是否可以提示管理员权限?

4
我有一个 Shell 脚本,它向 /etc/hosts 添加一行。如果我手动以 sudo 运行它,则可以正常工作。我希望将此文件分发给使用 Mac 的同事。但是,当 Shell 脚本正常运行时,我会收到以下错误信息:
sed: /etc/hosts: Permission denied

有没有一种方法可以强制bash脚本提示输入密码,就像编译的ObjC代码一样?如果Bash不能做到这一点,那么Applescript可以吗?

1
你不能从脚本中调用 sudo sed ... 吗? - Jesus Ramos
它不是从终端运行的,它是应用程序化的,在文件夹.app/Contents/MacOS目录中。因此,不能这样做。 - John O
1
有一个类似于 gksudo 的等效工具叫做 cocoasudo,您可以尝试使用。 - Jesus Ramos
请参考这个apple.se上的先前答案 - Gordon Davisson
3个回答

4

Adayzdone的答案是使用“以管理员权限”正确的方法。

但您不需要硬编码密码或创建自己的对话框。

如果您未包括用户名和密码,系统会提示您输入管理员的标准用户名和密码。

do shell script "echo hi" with administrator privileges

3

使用 AppleScript:

property usr : "username"
property pswd : "password"

do shell script "echo hi" user name usr password pswd with administrator privileges

如果您不想硬编码密码:

set usr to text returned of (display dialog "Enter username" default answer "my username")
set pswd to text returned of (display dialog "Enter password…" default answer "my password")

do shell script "echo hi" user name usr password pswd with administrator privileges

最好不要嵌入凭据。 - j_mcnally

3
你的shell脚本可以调用sudo,它会在终端要求输入密码。
尝试使用CocoaSudo,这是一个基于Cocoa的图形化sudo替代方案。
#!/usr/bin/env bash

if [ "$SUDO_USER" ]
then
  sed `do stuff`
else    
 cocoasudo --prompt="Please authenticate" bash -l -c "/path/to/this/script"
fi

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接