2017-04-30 4 views
-3

Ich habe versucht, alle folgenden ohne Glück:Wie mache ich "cat f1 f2>! F3" mit "system"?

system "cat f1 f2 >! f3"; 
system 'cat f1 f2 >! f3'; 
system "cat f1 f2 \>\! f3"; 
`cat f1 f2 >! f3`; 

Wie das ich tun?

+0

Da>:

system('/bin/sh', '-c', 'cat f1 f2 > f3'); 

Die oben kann auf folgende Werte verkürzt werden! ist ein Shell-Befehl, warum nicht die Kopie in Perl? – user1937198

+2

Was soll das tun? – melpomene

+0

@ user1937198: Was erwarten Sie als Parameter zu 'system', wenn nicht ein Shell-Befehl? – Borodin

Antwort

3

Das scheint ein csh Befehl zu sein, so dass Sie csh verwenden müssen.

system('/bin/csh', '-c', 'cat f1 f2 >! f3'); 

Das heißt, csh ist eine ziemlich schlechte Shell. Sie sollten in Erwägung ziehen, auf die Bourne-Shell umzuschalten (insbesondere für Skripts).

system('cat f1 f2 > f3'); 
+0

Genau das suche ich: system ('/ bin/csh', '-c', 'cat f1 f2>! f3'); – silverysword

+0

Ja, aber ich denke nicht, dass du das verwenden solltest. – ikegami

2

Der Umleitungsoperator >! ist kein Standard. Es existiert möglicherweise nicht in der /bin/sh, die Perl verwendet, um Ihre Befehle auszuführen. >| ist weiter verbreitet. Und da der Zweck von >! oder >| ist, die Einstellung noclobber zu überschreiben, sollten Sie sie überhaupt nicht verwenden müssen. Vielleicht möchten Sie noclobber in Ihrer interaktiven Shell verwenden, aber in Skripten sollte es nicht aktiviert sein und > sollte genauso funktionieren wie >|.

In jedem Fall ist die Verwendung von system nicht der effizienteste Weg, grundlegende Dateimanipulationsaufgaben von Perl aus durchzuführen.