如何在perl中调用unix命令

时间:2015-01-08 06:49:45

标签: perl unix

我正在尝试执行以下unix命令,但它没有被执行

$array_of_tables= `dbsmp $srv_name`;
print "$array_of_tables\n";

请帮我通过perl脚本找出数据库中的表格列表。

此外,我尝试使用以下命令将文件从路径复制到不同的路径: -

copy(`cd /osp/slee/service/$srv_name/bin/exec/script.txt`,`cd /osp/local/home/linus/amit/scripts`);

但收到错误: -

Usage: copy(FROM, TO [, BUFFERSIZE])

请提供一些解决方案 感谢

2 个答案:

答案 0 :(得分:3)

使用双引号代替反引号。

copy("/osp/slee/service/$srv_name/bin/exec/script.txt","/osp/local/home/linus/amit/scripts");

并删除cd

答案 1 :(得分:0)

在Perl中,捕获系统(shell)命令输出的首选方法是qx()运算符。请参阅http://perldoc.perl.org/perlop.html#Quote-Like-Operators

$array_of_tables = qx(dbsmp $srv_name);
print("$array_of_tables\n");

实际上,反引号也应该有效,所以问题必须在于你的dbsmp命令。我不确定那个命令是什么;您必须提供有关该实用程序的更多信息以及您看到的错误。

为了进行比较,我可以使用此shell命令将本地postgres数据库中的表列表检索为管道分隔表:

> psql -tAXq main postgres <<<\\d;

这可以从Perl运行,如下所示:

> perl -e 'print(qx(psql -tAXq main postgres <<<\\\\d;));'