我已经构建了一个使用NSTask的cocoa应用程序来调用我写的perl脚本(myScript.pl)。脚本本身执行另一个脚本(copy.command)。
copy.command脚本调用" mkfile",将创建的文件(文件称为' test1')复制到给定位置。在运行结束时,我不会删除“test1' (出于各种原因)。
iv无数次使用这些脚本,它始终有效。在我制作我的应用程序之前(意思是当我使用终端时) - 最后总共有两个文件,两个文件在不同的位置都有相同的名称。
这两个脚本都添加到了我的项目中。就像我说我使用NSTask。
我知道这两个脚本都在执行,因为我仍然可以找到' test1'脚本完成后的文件。但是,这是我的问题,我只能找到一个' test1'脚本完成后的文件 - 复制到另一个文件夹的文件。但是' test1'由' mkfile'创建的文件无处可寻。
我的问题:
文件消失了吗?我知道它已创建,因为我可以在另一个文件夹中找到它的副本。但我也希望看到原版。
也许我应该把文件放在.app文件夹之外的文件夹中?如果你认为这是解决方案,请告诉我如何传递给' mkfile'一条绝对的道路。
我已经考虑过捕获输出以查看是否出现问题,但我不知道该怎么做
一个新的解决方案来找我:也许我应该尝试将theDir更改为"系统文件夹"在bash脚本中,调用mkfile,copy,compare和changeDir。你怎么说?
我使用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;
}