|
|||
ruby [options][--][programfile][arguments] |
--
''
(zwei Bindestriche).
Wenn es keinen Dateinamen in der Kommandozeile gibt oder wenn er aus einem einzelnen Bindestrich besteht (-
), dann liest Ruby den Quellcode für sein Programm vom Standard-Input.
Argumente für das Programm selber kommen nach dem Programmnamen. Als Beispiel:
% ruby -w - "Hello World"
Das schaltet die Warnungen an, liest das Programm vom Standard-Input und übergibt ihm den String "Hello World"
als Argument.
-00
bedeutet Paragraph-Modus: Records werden durch zwei Default-Record-Separations-Zeichen getrennt. -0777
liest die komplette Datei auf einmal ein (weil das ein illegales Zeichen ist). Verändert $/
.
-n
or -p
benutzt;
ist äquivalent zur Ausführung von
{$F am Anfang jedes Schleifendurchgangs.
--copyright
$DEBUG
auf true.
Damit ist das Programm in der Lage, zusätzliches Tracing zu nutzen.
-e
's sind erlaubt und die Kommandos werden wie mehrere Zeilen des selben Programms behandelt. Falls programfile fehlt aber -e
vorhanden ist, hört die Ausführung des Programms auf, wenn die -e
-Kommandos beendet sind.
$;
) für den Input an, der als Default-Wert für split()
benutzt wird (beeinflusst -a
).
$LOAD_PATH
($:
) angehängt werden sollen. Mehrere -I
-Optionen dürfen vorhanden sein und mehrere Verzeichnisse dürfen unter jedem -I
stehen. Die Verzeichnisse werden dann auf unix-ähnlichen Systemen mit ``:'' und auf DOS/Windows-Systemen mit ``;'' getrennt.
ARGV
-Dateien, falls vorhanden.
In jede der in ARGV
genannten Dateien wird alles, was man auf den Standard-Output schreibt, als Inhalt dieser Datei gesichert. Vorher wird eine Sicherheitskopie der Datei angelegt, falls extension angegeben ist.
% ruby -pi.bak -e "gsub(/Perl/, 'Ruby')" *.txt
$\
auf den Wert von $/
und kappt jede Input-Zeile automatisch.
while gets; ...; end
''-Schleife um das Programm. Beispielsweise wird ein einfaches grep
-Kommando zu:
% ruby -n -e "print if /wombat/" *.txt
while gets; ...; print; end
''-Schleife.
% ruby -p -e "$_.downcase!" *.txt
RUBYPATH
oder PATH
Umgebungs-Variablen.
--
stehen, werden von ARGV
entfernt und stattdessen als globale Variable mit dem Namen dieser Option gesetzt. In dem folgenden Beispiel wird damit die Variable $opt
auf ``electric
'' gesetzt.
% ruby -s prog -opt=electric ./mydata
$SAFE
.
--version
-v
wird hier das Programm vom Standard-Input gelesen, wenn keine Programmdatei in der Kommandozeile steht. Wir empfehlen, Ruby-Programme immer mit -w
laufen zu lassen.
-C
directory.
#!ruby
-Zeile ab und ändert das Arbeitsverzeichnis auf directory falls angegeben.
ARGV
verfügbar.
Wenn man zum Beispiel Ruby mit
% ruby -w ptest "Hello World" a1 1.6180
aufruft, ergibt das ein ARGV
-Array mit dem Inhalt ["Hello World", a1, 1.6180]
. Da gibt es eine kleine Falle für all die C-Programmierer --- ARGV[0]
ist das erste Argument, nicht der Programmname.
Der Name des aktuellen Programms ist in der globalen Variablen $0
verfügbar.
Kernel#exit
beendet Ihr Programm und gibt einen Zustands-Wert an das Betriebssystem zurück. Anders als bei einigen anderen Sprachen wird mit
exit
das Programm nicht nur einfach abgebrochen.
Kernel#exit
löst erst eine SystemExit
-Exception aus, die man wenn man will auffangen kann, und führt noch mehrere Aufräumarbeiten durch, unter anderem das Ausführen aller registrierten
at_exit
-Methoden und Objekt-Finalizers. Einzelheiten gibts bei
Kernel#exit
ab Seite 419.
ENV
zugreifen. Diese reagiert auf dieselben Methoden wie ein Hash
. [ENV
ist nicht wirklich ein Hash, aber falls nötig kann an das in einen Hash
mit ENV#to_hash
konvertieren.]
Die Werte von einigen Umgebungs-Variablen werden von Ruby beim ersten Start gelesen. Diese Variablen verändern das Verhalten des Interpreters, so wie in Tabelle 13.1 auf Seite 141 beschrieben.
Von Ruby benutzte Umgebungs-Variablen
|
ENV
-Objekt schreiben, das ändert auf den meisten Systemen auch den Wert der dazugehörenden Umgebungsvariablen. Allerdings ist diese Änderung nur lokal zu dem ändernden Prozess und zu allen danach abgeleiteten Kindprozessen.
Diese Vererbung von Umgebungsvariablen wird in dem folgenden Code gezeigt. Ein Unterprozess ändert eine Umgebungs-Variable und diese Änderung ist in einem von ihm danach gestarteten Prozess sichtbar. Allerdings ist diese Änderung nicht im ursprünglichen Elternprozess sichtbar. (Das zeigt mal wieder, dass Eltern niemals wirklich wissen, was ihre Kinder anstellen.)
puts "In parent, term = #{ENV['TERM']}" fork do puts "Start of child 1, term = #{ENV['TERM']}" ENV['TERM'] = "ansi" fork do puts "Start of child 2, term = #{ENV['TERM']}" end Process.wait puts "End of child 1, term = #{ENV['TERM']}" end Process.wait puts "Back in parent, term = #{ENV['TERM']}" |
In parent, term = xterm Start of child 1, term = xterm Start of child 2, term = ansi End of child 1, term = ansi Back in parent, term = xterm |
require
oder load
, um ein Bibliotheks-Modul in seinem Ruby-Programm zu nutzen. Einige dieser Module werden mit Ruby mitgeliefert, einige hat man abseits des Ruby-Application-Archivs installiert und einige hat man selber geschrieben. Wie findet Ruby die alle?
Wenn Ruby auf einer speziellen Maschine installiert wird, definiert es sich erstmal einen Satz von Verzeichnissen, in die der ganze Bibliothekskram reinkommt. Wo diese sind, hängt von dem speziellen System ab. Man kann sie über die Kommandozeile herausfinden mit:
% ruby -e 'puts $:' |
/usr/local/lib/ruby/site_ruby/1.6/i686-linux /usr/local/lib/ruby/site_ruby/1.6 /usr/local/lib/ruby/site_ruby /usr/local/lib/ruby/1.6/i686-linux /usr/local/lib/ruby/1.6 . |
site_ruby
-Verzeichnisse enthalten Module und Erweiterungen, die man selber hinzugefügt hat.
Die architektur-abhängigen Verzeichnisse (in diesem Fall i686-linux
) enthalten ausführbare Dateien und andere für diese spezielle Maschine spezifische Sachen. All diese Verzeichnisse werden automatisch von Ruby bei der Suche nach Modulen bedacht.
Manchmal reicht das nicht. Vielleicht arbeitet man an einem großen Projekt und hat zusammen mit seinen Kollegen eine wichtige Bibliothek in Ruby geschrieben. Jeder aus dem Team soll Zugriff auf diesen ganzen Code haben. Es gibt eine Reihe von Möglichkeiten, um dies zu erreichen. Wenn das Programm mit dem Sicherheits-Level 0 (siehe Kapitel 20 ab Seite 257) läuft, kann man in die Umgebungsvariable
RUBYLIB
eine Liste von einem oder mehreren zu durchsuchenden Verzeichnissen schreiben.[Das Trennzeichen zwischen diesen Verzeichnissen hängt vom System ab. Bei Windows ist es ein Semicolon; bei Unix ein Doppelpunkt.] Wenn das Programm nicht mit setuid läuft, dann kann man den Kommandozeilen-Parameter -I
nutzen, um daselbe zu bewirken.
Schließlich ist die Ruby-Variable $:
ein Array von Orten, an denen nach geladenen Dateien gesucht wird. Diese Variable wird mit der Liste der Standard-Verzeichnisse angelegt, dazu kommen diejenigen, die man mit RUBYLIB
und -I
noch angibt. Man kann jederzeit zusätzliche Verzeichnisse aus dem laufenden Programm zu diesem Array hinzufügen.
Config
innerhalb der Bibliotheks-Datei ``rbconfig.rb
'' geschrieben.
Nach der Installation kann jedes Ruby-Programm dieses Modul nutzen, um zu erfahren, wie Ruby kompiliert wurde.
require "rbconfig.rb" |
||
include Config |
||
CONFIG["host"] |
» | "i686-pc-linux" |
CONFIG["LDFLAGS"] |
» | "-rdynamic" |
mkmf
ab Seite 455.