Dir in irb ausprobieren

Du bist hier: Hinterkattentuffel - Ruby - Dir in irb ausprobieren
Prev: Ruby im Konsolenfenster

Im interaktiven Ruby Interpreter kann man Ruby eintippen und direkt ausführen. Man kann z. B. einfach Dir["*"].entries eintippen und erhält ein Verzeichnislisting. So lassen sich recht einfach erste Gehversuche in Ruby starten. Die irb kann aber auch als Taschenrechner oder Kalender herhalten.

Sollten sich in irb nicht alle Zeichen eingeben lassen, ist vielleicht die Option --readline aktiv. Ich starte irb dann einfach ohne diese Option: irb --noreadline. Eine weitere Alternative ist das Programm fxri. Es wird mittlerweile vom Ruby-Installer mit bereitgestellt und vereint die Programme irb und ri in einer mit FXRuby erstellten Benutzeroberfläche.

Da irb auch mehrzeilige Eingaben verarbeitet, liefern Fehleingaben nicht notwendigerweise sofort eine Fehlermeldung. Man tut gut daran, das irb-Prompt im Auge zu behalten. Ein Strg-C bringt ggf. das Standardprompt zurück.

Im Hinblick auf unseren Playlist-Generator interessiert mich, wie Ruby Pfade verwaltet und lasse irb im Ordner "Eigene Dateien" das Kommando Dir.getwd ausführen. Das Ergebnis wird evtl. überraschen. Wurde irb wie beschrieben per Kontextmenü aus dem Explorer geöffnet, so erhalte ich bei älteren Versionen:

IRB>Dir.getwd
=>"/cygdrive/c/Dokumente und Einstellungen/Sascha/Eigene Dateien"

Sollte das Ergebnis anders aussehen, ist das ein gutes Zeichen: Offenbar ist eine halbwegs aktuelle Ruby-Version installiert. Ältere Ruby-Versionen für Windows wurden mit Hilfe der Unix-Umgebung Cygwin unter Windows compiliert und verwendeten für Pfade die durch die Cygwin-Dll vorgegebene Unix-Notation. Bei aktuellen Ruby-Installationen scheint das nicht mehr so zu sein, und zwar unabhängig davon, wie sie übersetzt wurden. Ich erhalte:

IRB>Dir.getwd
=>"C:/Dokumente und Einstellungen/Sascha/Eigene Dateien"

Man beachte, dass die Ausgabe keine Backslashes \ sondern Slashes / enthält. Der in Ruby verwendete Separator ist in Ruby als Konstante der Klasse File verfügbar. Über die Funktion gsub können die Slashes einer Pfadbezeichnung in den gewünschten Separator umgewandelt werden. Ein Verzeichnislisting von C:\* geht dann so:

IRB>Dir['C:/*'].each { |filename| puts filename.gsub(File.const_get('SEPARATOR'), "\\") }

Auch den umgekehrten Fall braucht man gelegentlich, etwa wenn man Pfade aus Umgebungsvariablen in Ruby-Pfade umrechnen möchte:

IRB>ENV['USERPROFILE'].gsub(/\\/, File.const_get('SEPARATOR'))
=>"C:/Dokumente und Einstellungen/Sascha"

Die Klasse Dir kennt auch gemappte Laufwerke. Auf Laufwerk D: kann man z. B. wie folgt zugreifen:

IRB>Dir["D:/*"].entries
=>[]

Ok, D: ist bei mir grade leer, aber grundsätzlich geht das, hab's ausprobiert ;-)

Next: Entwicklungsumgebung