我正在尝试从 perl 中执行以下 unix 命令
`git log --pretty=format:%H | grep $id | wc -l`;
我不断收到错误消息
sh: -c : syntax error near unexpected token '|'
sh -c : '| wc -l'
我该如何解决这个错误
问题是你有123<NEWLINE>
而不是123
in $id
,所以你将以下内容传递给 shell:
git log --pretty=format:%H | grep 123
| wc -l
代替
git log --pretty=format:%H | grep 123 | wc -l
修复中的值$id
。最好的方法可能是通过chomp
.
如果您使用 Perl 子例程而不是外部 Unix 命令来实现其中的一些功能,您可能会拥有一个更健壮的脚本。
使用反引号对快速脚本很有好处,但它本质上是脆弱的,因为您会暴露于为运行脚本的用户配置的任何 Unix shell 的全部功能和怪异(使用通配符扩展、输入/输出重定向、管道、 ETC。)。这确实适用于任何编程语言,并且大多数语言(包括 perl)都有更安全的方法来运行外部命令,而无需使用 shell。但是创建 Perl 的原因之一是能够在一种编程语言下结合大量 Unix 命令的文本处理能力。