PHP Command im Skript hat andere Ergebnisse als Shell - PHP, Bash, Shell

Ich habe die folgenden Zeilen in einem BASH-Skript:

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

printf -v ACTIONS_CMD "$ACTIONS_COMMAND" $FOLDER

$ACTIONS_CMD

Dies läuft innerhalb einer Schleife, um die gleiche Operation für mehrere Android-Anwendungen durchzuführen. Wenn ich das widerspreche $ACTIONS_CMD Kopieren Sie und fügen Sie den Befehl ein, es erzeugt die korrekte Ausgabe, aber das Skript selbst startet PHP, kopiert aber nicht das STDIN. Ich weiß das, weil PHP hängt, bis ich drücke Ctrl-D auf der Tastatur und dann klagt es, dass es keine Eingabe gab.

Ich habe versucht, den PHP-Befehl zu wechseln

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

Wenn der erste Dateiname in Anführungszeichen steht (was meiner Meinung nach aus Sicherheitsgründen sein sollte), bekomme ich

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 ...

und ohne die Anführungszeichen wird nur an das Terminalfenster ausgegeben.

Wenn es darauf ankommt, ist es GNU bash, version 3.2.51(1)-release (x86_64-apple-darwin13).

Antworten:

1 für die Antwort № 1

Sie können keine Programme mit Eingabe / Ausgabe-Umleitung in einer solchen Zeichenfolge ausführen. Es wird versuchen, die Pipe und Winkelzeichen und die Datei als Eingabe für das Programm zu verwenden, das Sie ausgeführt haben.

Sie müssen diese Zeichenfolge an eine Shell übergeben, um die Umleitung auszuführen.

Eine Möglichkeit, dies zu tun ist:

bash -c "$ACTIONS_COMMAND"