代码不适用于sh -c,但直接在sh上工作

时间:2012-04-13 11:40:38

标签: bash shell sh

$ sh
sh-3.2$ if
> ps -ef | grep apple ;
> then
> echo APPLE 
> fi ;
lazer   7584  7571  0 04:36 pts/4    00:00:00 grep apple
APPLE
sh-3.2$ exit
exit
$ which sh
/bin/sh
$ /bin/sh -c if ps -ef | grep apple ; then echo APPLE fi ;
bash: syntax error near unexpected token `then'
$

如上所述,我的简单if语句在逐行执行时按预期工作,但在使用sh -c执行时给出了以下错误:

  

bash:意外令牌附近的语法错误`then'

我在这里缺少什么?

1 个答案:

答案 0 :(得分:2)

您的交互式shell将通过sh -c转义调用。特别是它将分号后的每一个作为新的陈述。

引用您要提供给/bin/sh的所有内容,例如

$ /bin/sh -c "if ps -ef | grep apple ; then echo APPLE fi ;"

我认为您可能还需要使用分号进一步划分,因为您将所有内容压缩到一行,并且可能建议您使用heredoc