以前的代码都是在Linux下运行,并且都是直接的 root用户,所以根本没有考虑到权限的问题
来到 Mac 发现各种不行,只要是带了 sudo 的命令一律无法执行
system("sudo ls");
没错,这个简单的命令出问题了
错误提示 : sudo: no tty present and no askpass program specified
本以为会自动弹出密码输入框,可是,,没有,,,于是开始了漫长的查找中
开始的时候搜索方式不对,比如搜索 Mac root --- Mac 权限 ---Mac sudo
各种没有结果,让我顿时菊花一紧,难道又像之前MacUSB通信那么蛋疼吗?
结果还是被我找到了解决办法,不过内容不详细,所以这里再写一篇,弥补一下
需要提升权限,那就必须要通过系统的密码提示框来做到这点,可是,qt不具备,MacAPI好像也没有,怎么办呢
终于,applescript 的出现让我明白来,原来Mac下还有和 shell脚本不一样的脚本
找到了获取权限的命令
do shell script "ls" with administrator privileges
就是这样的,如果执行它,就会弹出密码输入框,输入密码后,命令ls 就是以管理员权限执行的了
对于刚刚入手Mac的我,运行它好像也是个问题,这里写一下过程
1、通过Mac的实用工具中的脚本编辑器,写入代码,点击运行,可以看到密码框的输入,证明没有问题
2、编辑器上面的下拉箭头可以保存脚本,保存为 a 桌面,可以看到桌面有个 a.scpt
3、在qt中怎么执行呢?
system("osascript a.scpt");osascript 是Mac的命令,用来执行脚本的
这样就可以执行 sudo 了
当然,脚本中的 ls 命令是看你的需求了,如果需要执行多条,我是用 ;隔开执行的,比如 ls;ls -a 这样就可以执行两条命令了
对脚步还不熟悉,先写下来用着吧