2010-09-11 10 views

Antwort

7

Darüber hinaus müssen Sie sich keine Gedanken darüber machen, dass Ihre Zielplattform über die spezifischen Tools verfügt, die Sie verwenden, und über das Problem hinausgehen, Shell-Kuriositäten korrekt zu zitieren (besonders problematisch, wenn Sie Ziel ist sowohl Windows als auch Unix-Alikes - Cygwin, GNUWin32, usw., wenn Sie Ruby's FileUtils verwenden, haben Sie den moderaten Overhead eines Ruby Funktionsaufrufs, während Sie, wenn Sie externe Programme verwenden, ziemlich viel Aufwand haben ein externer Prozess jeder "Anruf".

+0

aber Sie müssen sich sorgen, ob Ruby auf dem Ziel installiert ist. – ghostdog74

+0

Es sollte schmerzhaft offensichtlich sein, da die Person, die die Frage stellt, über Ruby-Module spricht, dass das Programm zweifellos ein Ruby-Programm ist. –

+0

Ich sage nicht, dass es kein Ruby-Programm ist. Ich spreche von Ihrer Aussage "Zusätzlich zu der Tatsache, dass Sie sich keine Sorgen darüber machen müssen, dass Ihre Zielplattform über die spezifischen Tools verfügt, die Sie verwenden". Natürlich müssen Sie auch sicherstellen, dass die Zielplattform über Ruby verfügt, bevor er sein Ruby-Programm ausführen kann. – ghostdog74

2

Sie sind einfacher von innen Ruby-Skripten aufzurufen, weil sie Ruby-Objekte als Argumente akzeptieren. Das bedeutet, dass Sie nicht mit der Flucht fertig werden müssen und nicht jedes Mal, wenn Sie sie anrufen.

+1

Sie müssen über Flucht keine Sorge, wenn 'System zu tun (“ cp ", file1, file2)' entweder (obwohl Sie tun, wenn Sie 'System (" cp # {file} # {file2} ")'). – sepp2k

+0

Was meinst du mit Flucht? Was hat mit dem System zu entkommen ("cp source_file destination_file") –

+0

@ajsie: Sie müssen Leerzeichen und spezielle Shell-Zeichen zu entkommen, wenn Sie die ein-Argument-Version von 'system' verwenden. Z.B. 'System (" cp Quelldatei Zieldatei ")' wird nicht funktionieren, weil die Leerzeichen nicht maskiert sind. Jedoch 'System (" cp "," Quelldatei "," Zieldatei ")' wird gut funktionieren. – sepp2k

6

Die FileUtils-Methoden funktionieren unter Windows.

+0

so können Shell-Tools. (ie cygwin, GNU win32) – ghostdog74

+1

@ ghostdog74: Nur wenn Sie sie zuerst installieren. Punkt ist: Wenn Sie FileUtils benutzen, wird Ihr Skript auf jedem System mit Ruby laufen. Wenn Sie cp verwenden, wird Ihr Skript auf jedem System mit ruby ​​und cp laufen. Es gibt keinen Grund, eine zusätzliche Abhängigkeit für etwas so einfaches wie das Kopieren von Dateien hinzuzufügen. – sepp2k

+0

müssen Sie zuerst Ruby installieren. – ghostdog74

1

Wenn Sie Objekte in der Shell farmen, fügen Sie eine Abhängigkeit von diesen Anwendungen hinzu. FileUtils ist purer Ruby, also funktioniert es (und funktioniert mehr oder weniger gleich) überall wo Ruby funktioniert.

-2

Ich würde nicht sagen, es gibt keine Vorteile bei der Verwendung von Ruby's FileUtils, da Sie sie überall dort verwenden können, wo Sie Ruby haben (besonders wenn Ihre Aufgabe in der Web-Entwicklung ist). Das bedeutet jedoch nicht, dass Sie diese Shell-Tools nicht auch auf anderen Plattformen verwenden können. Ja, Sie können Ihre Skripte in * nix shell schreiben, und Sie können sie auch mit wenig oder gar keiner Änderung in, sagen wir, Windows mit cygwin oder GNU win32 (und anderen) ausführen. In Bezug auf die Vorteile von Rubys FileUtils gegenüber Shells, ist es nur minimal, denn was Sie mit FileUtils machen können, können Sie auch mit Shells machen.

1
  • Arbeiten über mehrere Plattformen
  • keinen neuen Prozess erzeugen Sie den Befehl zu erteilen (so verbraucht es weniger Ressourcen)
+0

müssen Sie den Ruby-Interpreter ausführen, um das Ruby-Skript auszuführen. Dies erzeugt einen Prozess. nicht wahr? – ghostdog74

+0

Ah, ich glaube, ich habe die Frage falsch interpretiert. Ich dachte, er würde nach dem Shell-Befehl von Ruby fragen. –

Verwandte Themen