使用perl脚本执行命令

时间:2012-10-31 08:59:38

标签: perl unix command-line

我在unix中有简单的命令,如

cat myfile.txt >&mytemp.txt&

上面的命令只会创建文件myfile.txt的副本。 当我在命令行上执行命令时,它返回如下所示的进程ID:

> cat myfile.txt > & mytemp.txt &
[1] 769
>

我在perl脚本中形成相同的命令,并使用系统调用它,如下所示:

my $cmd="cat myfile.txt>&mytemp.txt&";
my $info = system("$cmd");

但sytem命令失败,并显示以下错误消息:

sh: mytemp.txt: bad number

我甚至试图转义>&。但错误消息没有变化。 我可以知道这个的原因吗?我在哪里错了?

3 个答案:

答案 0 :(得分:1)

我很确定你不能在此使用尾随&。如果希望程序在命令运行时继续运行,则fork让子进程运行该调用,然后退出。可能exec可以做到这一点,虽然我还没有尝试过使用输出重定向...

答案 1 :(得分:0)

就像消息所说的那样,这不是一个有效的sh命令。它可能是csh命令吗?

system('csh', '-c', $cmd);

答案 2 :(得分:-1)

试试这个:

perl -e "`cat myfile.txt>&mytemp.txt&`;"

正在执行命令并返回命令输出。 所以可以这样做:

#!/usr/bin/perl
my $content = `cat /etc/passwd`;
print $content;

如果您将代码放入perl脚本:

<强> cat-test.pl

#!/usr/bin/perl

use strict;
use warnings;

my $res = `cat myfile.txt>&mytemp.txt&`;