脚本中的PHP命令与shell有不同的结果

时间:2013-12-12 02:18:55

标签: php bash shell

我在BASH脚本中有以下几行:

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)

1 个答案:

答案 0 :(得分:1)

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

您需要将该字符串传递给shell才能进行重定向。

一种方法是:

bash -c "$ACTIONS_COMMAND"