我正在尝试从perl
中执行以下unix命令`git log --pretty=format:%H | grep $id | wc -l`;
我不断收到错误
sh: -c : syntax error near unexpected token '|'
sh -c : '| wc -l'
如何解决此错误
答案 0 :(得分:5)
问题是123<NEWLINE>
中有123
而不是$id
,因此您将以下内容传递给shell:
git log --pretty=format:%H | grep 123
| wc -l
而不是
git log --pretty=format:%H | grep 123 | wc -l
将值修复为$id
。最好的方法可能是通过chomp
。
答案 1 :(得分:1)
如果使用Perl子例程而不是外部Unix命令实现某些功能,则可能会有更强大的脚本。
使用反引用对于快速脚本很有用,但它本身就很脆弱,因为你会遇到为运行脚本的用户配置的任何Unix shell的全部功能和怪异(具有通配符扩展,输入/输出重定向) ,管道等)。这实际上适用于任何编程语言,并且大多数语言(包括perl)都有更安全的方法来运行外部命令而不使用shell。但是Perl创建的原因之一是能够在一种编程语言下结合一系列Unix命令的文本处理能力。