我已经编写了一个程序来使用Apple脚本在cocoapp中执行命令。面临两个问题 1)applescript总是从projet目录而不是根目录执行 2)cd命令正在运行,但是当我执行pwd时,它显示的是先前的目录名称而不是新的目录名称。
+(BOOL)callAppleScriptForScriptFile:(NSString *)command{
BOOL isError = YES;
NSAppleEventDescriptor* returnDescriptor = NULL;
NSDictionary* errorDict = nil;
NSString *appleScriptCommand = [NSString stringWithFormat:@"do shell script \" %@ &> /Users/username/Desktop/.output.txt\" user name \"username\" password \"password\" with administrator privileges",command];
//NSLog(@"Script command %@",appleScriptCommand);
NSAppleScript* scriptObject = [[NSAppleScript alloc] initWithSource:appleScriptCommand];
returnDescriptor = [scriptObject executeAndReturnError: &errorDict];
if (errorDict != NULL){
NSLog(@"%@",errorDict);
isError = NO;
}
DescType descriptorType = [returnDescriptor descriptorType];
NSLog(@"descriptorType == %@", NSFileTypeForHFSTypeCode(descriptorType));
NSData *data = [returnDescriptor data];
double currentPosition = 0;
[data getBytes:¤tPosition length:[data length]];
NSLog(@"currentPosition == %f", currentPosition);
[self readFromFileAndSend];
return isError;
}
期望这样的输出 cd桌面 o / p:成功(无需打印) 密码 o / p:台式机
答案 0 :(得分:0)
每个do shell script
语句都使用一个新的Shell进程,因此您不能执行类似在一个语句中更改工作目录然后在另一个语句中使它相同的操作。例如,如果您使用单独的语句
do shell script "cd ~/Desktop"
do shell script "pwd"
第二条语句将显示根目录,因为它是从头开始的-它与第一条语句没有任何关系。您需要在同一条语句中包含所有命令
do shell script "cd ~/Desktop; pwd"
在Cocoa应用程序中,您还可以使用NSTask,这将避免所有Apple Event的问题。