【问题标题】:How to execute cd commands with apple script如何使用苹果脚本执行 cd 命令
【发布时间】:2019-06-05 05:34:00
【问题描述】:

我编写了一个程序来使用苹果脚本在 cocoapp 中执行命令。我面临2个问题 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:&currentPosition length:[data length]];
NSLog(@"currentPosition == %f", currentPosition);
[self readFromFileAndSend];
return isError;

}

期待这样的输出 光盘桌面 o/p:成功(无需打印) 密码 o/p:桌面

【问题讨论】:

  • do shell script 语句中的所有内容都运行在同一个环境中,即它从父级调用时继承的环境,因此您需要将所有命令包含在相同的语句 - 你使用什么命令字符串?
  • 我没有使用流水线命令。我正在尝试复制一个像终端一样工作的应用程序。我会一一传递命令

标签: macos command applescript applescript-objc


【解决方案1】:

每个do shell script 语句都使用一个新的shell 进程,因此您不能在一个语句中更改工作目录,然后期望它在另一个语句中相同。例如,如果您使用单独的语句

do shell script "cd ~/Desktop"
do shell script "pwd"

第二条语句将显示根目录,因为它是从头开始的——它与第一条语句没有任何关系。您需要在同一语句中包含所有命令

do shell script "cd ~/Desktop; pwd"

从 Cocoa 应用程序中,您还可以使用 NSTask,这将避免所有 Apple Event 的东西。

【讨论】:

  • 谢谢。有什么办法可以达到这个要求。
猜你喜欢
  • 2020-07-14
  • 2011-08-18
  • 2020-09-25
  • 2015-01-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-07-11
  • 2012-06-14
相关资源
最近更新 更多