3 Stimmen

Warum schlägt diese Rückgabe fehl?

/tmp existiert natürlich, aber mkdir -p sollte keinen Fehler zurückgeben, wenn ein Verzeichnis existiert.

Warum schlägt das Folgende also fehl?

system("/usr/bin/mkdir -p /tmp 2> /dev/null") == 0 or print("Failed");        
if ($?) {print("Failed");}

system("/usr/bin/mkdir -p /tmp 2> /dev/null");
if ($?) {print("Failed");}

Von Bash erhalte ich das erwartete 0

# mkdir -p /tmp
# echo $?
0

3voto

John Zwinck Punkte 221200

Es ist /bin/mkdir nicht /usr/bin/mkdir. Ich weiß das nicht nur, weil du gesagt hast, dass /usr/bin/mkdir fehlschlägt und nicht nur, weil ich auf meinem (Mac OS X) System nachgeschaut habe, sondern auch, weil solche Low-Level, grundlegende Programme oft in /bin sind, da sie erforderlich sind, um ein System zu booten usw.

Übrigens solltest du nicht system(mkdir) verwenden, um Verzeichnisse von Perl aus zu erstellen. Ich bin mir sicher, dass es genügend Möglichkeiten gibt, dies "nativer" und mit besserer Fehlerüberprüfung zu tun.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X