【问题标题】:Perl system command to run scripts at command promptPerl 系统命令在命令提示符下运行脚本
【发布时间】:2014-03-18 15:46:08
【问题描述】:

这是一个非常短的脚本,我正在尝试使用它来让 PC 的命令提示符运行一系列脚本。脚本的数量各不相同,但对于此示例,假设有 10 个,编号为 0-10。这些脚本是 SAS 程序文件。我正在使用system 命令,但有一个我无法发现的错误。

use strict; use warnings;

for ( my $i = 0; $i < 10; $i++ )  {
      system "sas -SYSIN $i.sas -ICON -NOSPLASH -LOG 'c:\Users\...' -PRINT 'c:\Users\...' ";
}

我收到以下错误:

"Missing braces on \o{} at "perlscript.pl" line 6, near "sas..."

我在system 命令之后的文本周围放置了大括号,但这并不能解决问题。我也尝试了括号(),但没有任何乐趣。在读取文件位置时,添加额外的大括号或 () 也会给我“无法识别的转义”错误。

【问题讨论】:

  • 尝试使用 qq{} 代替引号,例如 system(qq{sas ...});
  • 你的意思是:`qq { sas -SYSIN $i.sas -ICON -NOSPLASH -LOG 'c:\Users\...' -PRINT 'c:\Users\.. .' } ;
  • 你应该真正使用列表形式:system "sas", "-SYSIN", "$i.sas", "-ICON", "-NOSPLASH", "-LOG", "c:/Users/...", "-PRINT", "c:/Users/...";——这样可以避免生成一个 shell 来运行命令。
  • 人们对此投了赞成票,但我发现这会产生很多错误消息,missing operator 消息。
  • 好的,我忘记了逗号。我的错。

标签: perl shell command-line sas


【解决方案1】:

您在双引号字符串中使用了反斜杠:system "... \U ..."。这些要么是特殊的转义码,要么被忽略。无论哪种情况,您最终都会得到一个您不想要的字符串。为避免这种情况,请转义所有反斜杠,或对路径使用正斜杠:C:/foo/bar。大多数工具都可以很好地使用正斜杠,即使在 Windows 上也是如此。

【讨论】:

  • 当我用正斜杠切换所有反斜杠时,我得到一个新错误:` sas not Recognized as an internal or external command`
  • @ES55 好吧,Perl 方面现在正在工作。您可以从命令提示符运行sas 吗?您可以搜索错误消息,会看到这个not recognized as an internal or external command 是一个常见问题,例如当 PATH 变量设置不正确时。
  • 不过,当我使用qq{} 时,就像上面的@mvp 建议的那样,我没有收到not recongized as ... 错误。
猜你喜欢
  • 2013-06-12
  • 2013-03-27
  • 1970-01-01
  • 2016-11-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-10-15
相关资源
最近更新 更多