免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 3355 | 回复: 7
打印 上一主题 下一主题

求助一个perl 与 cat的问题 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2005-12-27 23:32 |只看该作者 |倒序浏览
foreach (@svcFiles) {
                s/\\/\//g;
                $cmd="/usr/bin/cat $_ >> $mqDIR/$svcArgs{trackingID}";
                system($cmd);
                print LOGFILE "--- bundle $_ \n";
        }

@svcFiles
里面的内容
/output/2784-999998-1-1.out4
/output/2784-999998-1-1.out5

$svcArgs{trackingID}
的值 为 1234
运行结果:1234这个文件的大小为0!
如果把
$cmd="/usr/bin/cat $_ >> $mqDIR/$svcArgs{trackingID}";
改成
$cmd="/usr/bin/cat $_ >> $mqDIR/$svcArgs{trackingID}.out";
运行结果:1234.out的这个文件就是正常的文件!

快被折磨疯了~~~~~
同学们帮帮忙啊。

论坛徽章:
1
荣誉会员
日期:2011-11-23 16:44:17
2 [报告]
发表于 2005-12-28 10:53 |只看该作者
有没有试着把error print出来看看为什麽?
通常会为0..一定都有什麽error产生 .....
用个eval包起来..然後print $@看看...

论坛徽章:
0
3 [报告]
发表于 2005-12-28 11:05 |只看该作者
asd@cu:~> cp /etc/issue .
asd@cu:~> cat test.pl

#!/usr/bin/perl

my %has=(
        'file1' => 'file1',
        'file2' => 'file2',
        );

my $file='issue';
my $cmd="cat $file >>$has{file2}";
system($cmd);

asd@cu:~> perl test.pl

asd@cu:~> cat file2

Welcome to SUSE LINUX Enterprise Server 9 (i586) - Kernel \r (\l).


asd@cu:~>

论坛徽章:
0
4 [报告]
发表于 2005-12-28 17:22 |只看该作者
原帖由 apile 于 2005-12-28 10:53 发表
有没有试着把error print出来看看为什麽?
通常会为0..一定都有什麽error产生 .....
用个eval包起来..然後print $@看看...

这个脚本是在别的脚本里调用的,别的脚本在后台跑。error看不见。
正尝试把这个脚本单独独立出来,然后独自跑看看error。

我也尝试过在这个脚本里打印error来,未果。

让人郁闷的地方地方在于如下:
1,
$cmd="/usr/bin/cat $_ >> $mqDIR/$svcArgs{trackingID}";中$svcArgs{trackingID}这个参数传过来的别的2456等等,脚本工作正常。
2,
如果我先产生一个
$cmd="/usr/bin/cat $_ >> $mqDIR/$svcArgs{trackingID}.out";文件。
然后用
`mv $mqDIR/$svcArgs{trackingID}.out $mqDIR/$svcArgs{trackingID}`
$mqDIR/$svcArgs{trackingID}这个文件就变成0了!!
要是用cp命令
`cp $mqDIR/$svcArgs{trackingID}.out $mqDIR/$svcArgs{trackingID}`
$mqDIR/$svcArgs{trackingID}这个文件能产生,但居然跟带.out的文件大小不一样!
它把$mqDIR/$svcArgs{trackingID}.out 文件中的 ' 号,改称 了 `号。还在文件行头加了一个空格。

单独运行系统命令cp , mv 都是正常好用的。

放到perl里面怎么大部分都好用,碰道文中的特别情况就不正常运行了。
perl的版本This is perl, version 5.005_03 built for sun4-solaris

论坛徽章:
0
5 [报告]
发表于 2005-12-28 17:37 |只看该作者
原帖由 dajun 于 2005-12-28 11:05 发表
asd@cu:~> cp /etc/issue .
asd@cu:~> cat test.pl

#!/usr/bin/perl

my %has=(
        'file1' => 'file1',
        'file2' => 'file2',
        );

my $file='issue';
my $cmd=&quo ...

感谢回复!!
单独的调试脚本是可以运行的。
但是原脚本大部分情况都好用。

论坛徽章:
0
6 [报告]
发表于 2005-12-29 08:51 |只看该作者
原帖由 solarwind 于 2005-12-28 17:22 发表

放到perl里面怎么大部分都好用,碰道文中的特别情况就不正常运行了。

试试把系统语言改成中文编码,再运行一下看看,可能是编码问题。

论坛徽章:
1
荣誉会员
日期:2011-11-23 16:44:17
7 [报告]
发表于 2005-12-29 09:05 |只看该作者
後台运行?你确定直接用cp、mv可以用吗?应该要改成/usr/bin/cp /usr/bin/mv吧...
另外执行这个程序的user  id跟file的owner是一样的吗?
再检查看看filesystem还有没有空间....
档名如果有中文...通常都会碰到编码的问题.....建议档名用英文表示比较好....

论坛徽章:
0
8 [报告]
发表于 2005-12-29 11:40 |只看该作者
十分感谢大家的回复,和建议!
在多次测试之后,
发现在本脚本运行的后期部分,把这个产生的文件传给另一个脚本。
而另一个脚本中用java打开这个文件进行操作!
就是说前部分应该是成功的。
后来java打开文件的时候出现了问题。
文本文件,大小1.6m左右。
java再操作的时候,出现了溢出。

您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP