我需要在使用sudo的Xcode 4中的运行脚本构建阶段的脚本中执行命令。然而,编译器会抱怨:如何在Xcode 4的Run Script构建阶段内使用sudo?
须藤:不存在TTY并没有askpass程序指定
任何人有这个问题的聪明的解决方案?
我需要在使用sudo的Xcode 4中的运行脚本构建阶段的脚本中执行命令。然而,编译器会抱怨:如何在Xcode 4的Run Script构建阶段内使用sudo?
须藤:不存在TTY并没有askpass程序指定
任何人有这个问题的聪明的解决方案?
一种解决方案是将输入sudo密码在一个可执行的shell脚本如下所示:
#!/bin/bash
echo thesudopassword
这个shell脚本可以被称为password.sh
然后,设置环境变量SUDO_ASKPASS =密码.sh
设置完成后,可以将-A选项传递给sudo。该选项使用ASKPASS程序来获取sudo密码。 ASKPASS程序只需将密码写入标准输出。
因此,例如,
sudo -A ditto -V /tmp/testserver.dst/
这显然是一个相当不安全的解决方案,但它确实工作。
至少让它只有你可读! 'chmod 600
你也可以执行的XCode使用sudo这样给它的项目从终端参数:
sudo /Developer/Applications/Xcode.app/Contents/MacOS/Xcode /path/to/your/project.xcodeproj
这是我能想到的最简单的方法,但可能会有一些缺点,因为你会以root身份执行XCode。
呃。从技术上讲,这是有效的,但我建议不要这样做,尤其是考虑Xcode 4的错误(基于它崩溃的频率......想象它可能会因root权限而造成的破坏)。 – Richard
由于您总是必须以root身份运行Xcode,因此这会影响项目的未来更改。 – mydogisbox
无需在任何地方编写您的sudo密码。只需打开一个终端窗口,键入
$ sudo echo "hello"
一旦你输入的密码,这将是好一会儿 - 不知过了多久 - 由Xcode中催生了壳将继承此权限。
如果再次获得“无TTY本”的消息后,重复刚才的步骤
有效,但在自动化环境中无用。 – Jasarien
这个问题的另一种解决方案是修改sudoers文件和您的帐户添加到它,说明你不应该问sudo密码。要做到这一点是非常简单的:
运行:
sudo visudo
在用户权限说明部分中添加一行看起来
youraccountname ALL=(ALL) NOPASSWD: ALL
当然,这可能是做危险的事,所以要小心。我建议在走这条路线之前阅读sudoers和visudo的手册页。还没有被建议尚未
最好使用'youraccountname ALL =(ALL)NOPASSWD:SETENV:/ path/to/script',它将无密码限制限制到特定路径,然后使用'sudo -E/the/script' Xcode传输环境变量(例如'$ BUILT_PRODUCTS_DIR'等) – jrodatus
两个想法,这两者都可能比目前公认的答案更好/更安全:
第一种选择将是把需要以root身份运行该脚本的一部分在脚本文件(。sh或者其他东西),然后以root身份setuid:chmod go-w,+sx scriptfile
,sudo chown root scriptfile
。这意味着脚本将以root身份自动运行,这可以避免您需要进行身份验证才能运行它(只是为了更改它)。只要其操作不受用户输入限制,这应该是相当安全的。 (当然,如果你犯了一个脚本,需要一个输入参数,并将其删除或运行它,或做了大部分别的吧,那会不是安全的。)
第二个选项是使用AppleScript的(可能通过osascript)。 Applescript允许你输入do shell script "sudo command goes here" with administrator privileges
,这将弹出一个图形对话框询问密码。
这些选项中的第一个对于自动化环境很有用,但它可能无法很好地处理(例如)签入SCM或发送给其他用户。第二种方法可以更好地工作,但每次都需要密码输入,所以对于自动构建脚本来说也不行。
我建议说明你在使用sudo access做什么。这可能会开辟更广泛的替代品。 –
将文件从一个位置复制到另一个位置,需要使用root访问权限才能完成。 – ericg
我有同样的问题,我已经为该脚本设置了ALL = NOPASSWD。事实上,如果我从控制台执行它,它不会要求密码 – hithwen