2013-12-12 143 views
2

不同的结果,我有一个bash脚本下面几行:PHP命令脚本比外壳

ACTIONS_COMMAND="php -f $BASEDIR/scripts/activities.php < \"$SRC_DIR/%s/AndroidManifest.xml\"" 

printf -v ACTIONS_CMD "$ACTIONS_COMMAND" $FOLDER 

$ACTIONS_CMD 

这将运行一个循环做同样的操作,一些Android应用程序内。 当我回显$ACTIONS_CMD并复制并粘贴命令时,它会产生正确的输出,但脚本本身启动PHP,但不复制STDIN。我知道这是因为PHP挂起,直到我在键盘上按Ctrl-D,然后它抱怨没有输入。

我试图切换PHP命令

ACTIONS_COMMAND="cat \"$SRC_DIR/%s/AndroidManifest.xml\" | php -f $BASEDIR/scripts/activities.php" 

当第一个文件名是在引号(我认为它应该是安全的),我得到

cat: "apps/app_name/AndroidManifest.xml": No such file or directory 
cat: |: No such file or directory 
cat: php: No such file or directory 
cat: -f: No such file or directory 
<?php 
... REST OF PHP SCRIPT ... 

不含引号它只是输出到终端窗口。

重要的是GNU bash, version 3.2.51(1)-release (x86_64-apple-darwin13)

+0

只是最终构建命令前加上一个'echo'看到正在发生的和潜在的任何错误。 –

+0

@MattWilliamson我做到了这一点,并在终端手动运行的命令。 – yakatz

回答

1

您不能在类似的字符串中执行带有输入/输出重定向的程序。它会尝试使用管道和角度字符以及文件作为您执行的程序的输入。

您需要将该字符串传递给shell以执行重定向。要做到这一点

一种方法是:

bash -c "$ACTIONS_COMMAND"