我有一个这样的系统命令:
unix_command "@output_file path_to_file"
现在,当我在perl脚本中尝试exec
或system
命令时,我收到此错误:
在期待操作员时获取字符串。
你能帮我解决一下如何在Perl中做到这一点。
感谢您的帮助。
非常感谢! 勒凯什
答案 0 :(得分:4)
system
实际上是两个不同的功能。
以下语法用于启动程序:
system($prog, @one_or_more_args)
system({ $prog }, $arg0, @args)
使用其中一种语法,所有作为参数传递的字符串都不会被传递给子程序。
使用示例:
system('perl', '-e', 'my @a = "foo"; print "@a\n";');
以下语法用于执行shell命令:
system($shell_cmd)
以上是
的简称system('/bin/sh', '-c', $shell_cmd)
您必须提供有效的shell命令。你正在构建命令,你需要注意正确地逃避任何需要逃逸的事情。
使用示例:
use String::ShellQuote qw( shell_quote );
my $cmd = shell_quote('perl', '-e', 'my @a = "foo"; print "@a\n";');
system($cmd);
对你的情况更具体一点,shell命令
program @file1 file2
可以按如下方式执行:
system('program', '@'.$file1, $file2);
如果您确实需要构造一个shell命令(例如,因为您想重定向输出),则可以使用以下命令:
use String::ShellQuote qw( shell_quote );
my $cmd = shell_quote('program', '@'.$file1, $file2) . ' >output.txt 2>&1';
system($cmd);
答案 1 :(得分:2)
如果您不需要插值,请使用单引号。
system 'echo @a';
如果这样做,请使用反斜杠。
system "echo \@a";