2009-07-24 31 views
3

Hallo ich habe ein Shell-Skript, das über die Rückgabe von PHP-Code auf Basis laufen soll:Shell Script Segmentation Fault

x=1 
while [[ "$x" != 5 ]] 
do 
    echo "Welcome $x" 
    php test.php 
    x=$? 
done 

Und der PHP-Code

echo "Testdfdf test".PHP_EOL; 
exit(4); 

So möchte ich, wenn ich 5 erhalten aus PHP, um die Schleife zu beenden.

Aber ich habe manchmal:

./myshell: line 7: 20529 Segmentation fault  php test.php 

Sollte es Schleife ohne Problem?

+1

aktivieren Core-Dumps mit ulimit; führe das Skript aus; Wenn Sie sich die Core-Datei ansehen, wird Ihnen angezeigt, welcher Prozess zu ihrer Erstellung geführt hat - am wahrscheinlichsten der PHP-Interpreter, was dies nicht zu einem Bash-Problem macht; Sie können dann einen Stack-Trace vom Core-Dump generieren, um ihn an die entsprechende Partei zu melden. –

Antwort

1

Es sollte und es tut, aber keine Ahnung, warum PHP mit einem segfault endet.

1

Ihre Shell While-Schleife wird für immer Schleife, wie Ihr PHP-Skript 4 zurückgibt, Shell, und Ihre While-Schleife überprüft für! = 5. was bedeutet, dass die Bedingung nicht erfüllt wird. was willst du eigentlich tun? Wenn nicht, würde ich raten, alles mit PHP (oder Shell) zu machen, aber versuche nicht beides zu vermischen.

+0

Das Mischen von beiden entspricht voll und ganz der UNIX-Ideologie "vieler kleiner Werkzeuge"; Andere Programme aufzurufen und ihren Exit-Code zu überprüfen ist schließlich, was Shell am besten kann. :) Der Vorteil, alles in PHP zu pushen, ist, dass es nicht nötig wäre, einen neuen Interpreter in jedem Zyklus der Schleife zu starten - sicherlich eine Leistungsverbesserung, wenn auch vielleicht mit einer Auswirkung auf die Korrektheit [ab] verwendet globale Variablen). –