0

我正在尝试从 perl 中执行以下 unix 命令

`git log --pretty=format:%H | grep $id | wc -l`;

我不断收到错误消息

sh: -c : syntax error near unexpected token '|'
sh -c : '| wc -l'

我该如何解决这个错误

4

2 回答 2

5

问题是你有123<NEWLINE>而不是123in $id,所以你将以下内容传递给 shell:

git log --pretty=format:%H | grep 123
 | wc -l

代替

git log --pretty=format:%H | grep 123 | wc -l

修复中的值$id。最好的方法可能是通过chomp.

于 2012-07-16T18:52:27.927 回答
1

如果您使用 Perl 子例程而不是外部 Unix 命令来实现其中的一些功能,您可能会拥有一个更健壮的脚本。

使用反引号对快速脚本很有好处,但它本质上是脆弱的,因为您会暴露于为运行脚本的用户配置的任何 Unix shell 的全部功能和怪异(使用通配符扩展、输入/输出重定向、管道、 ETC。)。这确实适用于任何编程语言,并且大多数语言(包括 perl)都有更安全的方法来运行外部命令,而无需使用 shell。但是创建 Perl 的原因之一是能够在一种编程语言下结合大量 Unix 命令的文本处理能力。

于 2012-07-16T18:41:06.660 回答