从cocoa调用mkfile后无法找到文件

时间:2014-06-20 08:45:30

标签: objective-c macos perl bash cocoa

我已经构建了一个使用NSTask的cocoa应用程序来调用我写的perl脚本(myScript.pl)。脚本本身执行另一个脚本(copy.command)。

copy.command脚本调​​用" mkfile",将创建的文件(文件称为' test1')复制到给定位置。在运行结束时,我不会删除“test1' (出于各种原因)。

iv无数次使用这些脚本,它始终有效。在我制作我的应用程序之前(意思是当我使用终端时) - 最后总共有两个文件,两个文件在不同的位置都有相同的名称。

这两个脚本都添加到了我的项目中。就像我说我使用NSTask。

我知道这两个脚本都在执行,因为我仍然可以找到' test1'脚本完成后的文件。但是,这是我的问题,我只能找到一个' test1'脚本完成后的文件 - 复制到另一个文件夹的文件。但是' test1'由' mkfile'创建的文件无处可寻。

我的问题:

  1. 文件消失了吗?我知道它已创建,因为我可以在另一个文件夹中找到它的副本。但我也希望看到原版。

  2. 也许我应该把文件放在.app文件夹之外的文件夹中?如果你认为这是解决方案,请告诉我如何传递给' mkfile'一条绝对的道路。

  3. 我已经考虑过捕获输出以查看是否出现问题,但我不知道该怎么做

  4. 一个新的解决方案来找我:也许我应该尝试将theDir更改为"系统文件夹"在bash脚本中,调用mkfile,copy,compare和changeDir。你怎么说?

  5. 我使用macbook air,osx 10.9.2,xcode 5.1

    感谢 zook2005

    这是复制命令

    #!/bin/bash
    
    if [[ ! -r "test1" ]]
    then
    mkfile -n 1g test1
    fi
    
    cp -f test1 /Volumes/$1/test1 &> /dev/null
    
    E_UNREADABLE=86
    
    if [[ ! -r "test1" || ! -r "/Volumes/$1/test1" ]]
    then
    #echo "Both files to be compared must exist and be readable."
    exit $E_UNREADABLE
    fi
    
    cmp test1 /Volumes/$1/test1  &> /dev/null  
    OUT=$?
    
    if [ ! $OUT -eq 0 ]; then
        exit $OUT
    fi
    
    #rm test1
    
    exit 0
    

    和perl脚本:

    #!/usr/bin/perl
    use strict;
    use warnings;
    use Cwd;
    use Cwd 'abs_path';
    use File::Basename;
    use File::Spec::Mac;
    require Term::ANSIColor;
    use Term::ANSIColor;
    use threads;
    use Time::HiRes qw(gettimeofday);
    use Getopt::Long;
    
    sub result;
    sub copyfunction($);
    
    
    my $volumeName = " ";
    
    GetOptions ('f=s' => \$volumeName);
    
    sub main
    {
        my $dirname = dirname(__FILE__);
        chdir $dirname;
    
        my $thread = threads->new( sub {   copyfunction($volumeName);});
        $thread->join();
    
        return 0;
    }
    exit(main());
    
    
    sub copyfunction($)
    {
        my $volumeName = shift;
    
        system("chmod +x ./copy.command");
        system( "./copy.command", $volumeName);
        if($? != 0) # 0 = files are identical
        {
            return(result(0, "volumeName" ,"failed to copy files"));
        }
    
        return(result(1, "volumeName"));
    }
    
    
    sub result($) #POF, functionName, reasonForFail
    {
        my $POF = $_[0];
        my $functionName = $_[1];
    
        if($POF == 0)
        {
            my $reasonForFail = $_[2];
            print "$functionName || failed || $reasonForFail\n";
        }
        else{
            print "$functionName || passed ||\n";
        }
    
        return $POF;
    }
    

0 个答案:

没有答案