Ruby: Wie lade ich eine Datei in die interaktive Ruby-Konsole (IRB)?

83

Ich benutze IRB (interaktive Ruby-Konsole), um zu lernen, wie man mit Ruby programmiert. Wie lade ich eine Datei in die Konsole, wenn ich meine Programme zuerst in einem Texteditor schreibe?

nbonbon
quelle
Ist [dies] [1] das, was Sie erreichen möchten? [1]: stackoverflow.com/a/2652558/919641
pjam
1
Quelle ("Dateiname.rb")
Assad Ebrahim

Antworten:

85

Wenn Sie nur eine Datei in IRB laden müssen, können Sie sie aufrufen, irb -r ./your_file.rbwenn sie sich im selben Verzeichnis befindet.

Dies erfordert automatisch die Datei und ermöglicht es Ihnen, sofort damit zu arbeiten.

PhilG
quelle
2
Wenn Sie mehr als nur -r zwischen jede Datei einfügen möchten, dann mache ich das und es funktioniert. Auf diese Weise lade ich alle meine Dateien in irb, damit ich auf alle Inhalte meiner App in irb zugreifen kann. Natürlich verwende ich ein Rake-Skript, um die Boot-Datei in irb zu laden, damit ich es einfach kann rake irbund es alles für mich erledigt.
Thermatix
Dies war mein erster Versuch nach dem Lesen von man, aber ich benutze -r some_file.rb, 30 Minuten später fand ich dies und fügte hinzu ./, danke xd
Alexis
In Ubuntu 16.04 entferne ich den Punkt:irb -r /foo/foo.rb
noobninja
Dies gibt keinen Zugriff auf Variablen aus der Datei.
Radon Rosborough
45

Mit Ruby 1.9.3 unter Ubuntu 14.04 kann ich Dateien aus dem aktuellen Verzeichnis irbmit der folgenden Befehlszeile laden :

irb -I . -r foo.rb

Wo foo.rbist die Datei, die ich aus meinem aktuellen Verzeichnis laden möchte? Die -IOption ist erforderlich, um das aktuelle Verzeichnis ( .) zum Ladepfad von Ruby hinzuzufügen , wie in der Ruby-Manpage erläutert. Dies ermöglicht das Abrufen von requireDateien aus dem aktuellen Verzeichnis. Dies ist die -rOption, irbdie ausgeführt werden soll.

Das Schlüsselstück, das mir bei diesem Problem nicht klar war, ist die -IOption. Sobald Sie dies getan haben, können Sie require 'foo.rb'von innen irbnach Dateien im aktuellen Verzeichnis suchen. Und natürlich können Sie jedes gewünschte Verzeichnis angeben, nicht nur .mit der -IOption. Um mehrere Verzeichnisse in den Ladepfad aufzunehmen, trennen Sie sie durch einen Doppelpunkt (:), z.

irb -I foo/:bar/:baz/

Dieser Befehl wird die Verzeichnisse hinzufügen foo, barund bazzu Rubys Lastpfad.

Die letzte Alternative besteht darin, den relativen oder absoluten Pfad zur Datei zu verwenden, wenn Sie eine Datei verwenden requireoder -rladen:

irb -r ./foo.rb

oder von innen irb :

> require './foo.rb'
wachr
quelle
Das Ergebnis Ihrer Lösung ist das gleiche wie das Aufrufen von 'ruby foo.rb', aber zumindest sehen Sie, was los ist. Ich möchte die Konsole jedoch offen lassen, damit ich weitere Befehle ausführen kann. Irgendeine Idee?
Paul Verschoor
31

Eintippen irb

Und dann

require './ruby_file.rb'

Dies setzt voraus, dass sich ruby_file.rb im selben Verzeichnis befindet. Dementsprechend anpassen.

okysabeni
quelle
4
Sie können auch verwenden require_relative. ZB require "./lib/foo"macht das gleiche wierequire_relative "lib/foo"
Dennis
.rbist optional, können Sie require './ruby_file'. I checked in Ruby 1.9.3p551`
AMIC MING
Was macht die ./?
12.
1
@ the12 ist ein relativer Pfad zum aktuellen Verzeichnis
winklerrr
27

Zwei Wege:

  1. Quelle laden, ohne das Programm auszuführen - dies ermöglicht den Zugriff auf alle Variablen und Funktionen:

source("filename.rb")

  1. Programm ausführen und dann in den interaktiven Modus wechseln - dies gibt nur Zugriff auf Funktionen, nicht auf Variablen:

require("filename.rb")

Assad Ebrahim
quelle
Dies scheint die Frage zu beantworten, wie auch ein Skript neu geladen werden kann. Ich habe verwendet, requiredas das Skript nicht neu zu laden scheint (Änderungen an der Originalquelle werden in Ihrer Sitzung nicht berücksichtigt), während sourceÄnderungen am Original-Skript angezeigt werden.
Michael Welch
4

Es hängt von deinem Rubin ab. Ruby 1.8 enthält Ihren aktuellen Pfad, Ruby 1.9 nicht. Bewerten Sie, $:um festzustellen, ob Ihr Pfad enthalten ist oder nicht. In Ruby 1.9 müssen Sie also den gesamten Pfad verwenden, was immer eine sichere Sache ist.

Dann können Sie die Datei verwenden requireoder loadeinschließen.

requireSie müssen das Suffix der Datei nicht hinzufügen, wenn Sie versuchen, sie zu finden, und die Datei wird nur einmal eingefügt. requiresollte anstelle der loadmeisten Zeit verwendet werden.

Check out Hinzufügen eines Verzeichnisses zu $ ​​LOAD_PATH (Ruby), wenn Sie Ruby 1.8 verwenden möchten

Michael
quelle
2

Geben Sie die Ruby-Codes in den Texteditor ein

Speichern Sie es mit der Erweiterung .rb (zum Beispiel: demo.rb ).

Öffnen Sie unter Linux Ihr Terminal und wechseln Sie in das Verzeichnis an den aktuellen Speicherort dieser Datei (mit dem Befehl cd wird das Verzeichnis geändert).

Geben Sie danach irb und Ihren Dateinamen ein (vergessen Sie nicht, Ihre Erweiterung (.rb) anzugeben).

Klicken Sie hier, um das Laden einer Ruby-Datei mit irb zu sehen

In diesem Bild habe ich eine einfache Ruby-Datei geladen, die nur "Ruby" druckt.

Vinoth
quelle
0

Eine andere Möglichkeit, den Pfad in irb zu laden, besteht darin, require einzugeben und die Datei per Drag & Drop in das Terminal zu ziehen. Using -getestet mit Linux Mint.

Mike Kennedy
quelle
Linux Mint. Entschuldigung, ich hätte das hinzufügen sollen.
Mike Kennedy
0

Für diejenigen, die eine .rb-Datei aus dem anderen Verzeichnis laden möchten. Fügen Sie einfach einen String-Repräsentanten des Verzeichnisses zu $: variable hinzu.

> $: << "/directory/to/the/required/rb/file"
> require "some_file"
Tagaismus
quelle