In der Erlang-Shell, wie kann ich lesen automatisch alle meine Platten Definition-Header

StackOverflow https://stackoverflow.com/questions/4071788

  •  28-09-2019
  •  | 
  •  

Frage

Dies wie die Frage beginnt:

Fast jedes Mal, wenn ich den Erlang-Shell verwenden, würde Ich mag einen Befehl auf Shell-Start ausgeführt wird, z.B. so etwas wie

rr("*.hrl").

oder ähnliches. Zur Zeit habe ich es jedes Mal, tippe ich eine Erlang-Shell starten und ich bin müde davon und vergessen es die ganze Zeit.

Aber das war eigentlich die falsche Frage! Für das, was ich wollte eigentlich zu tun ist mein Zeuge Definition-Header in jedem Shell Job zu lesen. Nicht verwenden, für andere der Schale integrierten Befehle beim Start ausgeführt wird. So habe ich die Frage Header geändert, um die Frage zu zeigen, wie sie fragen sollen.

War es hilfreich?

Lösung

Während die Lösung mit .erlang versucht, stieß ich auf eine Lösung für die spezifische rr / 1 Nutzung:

Von der Mann-Seite von Shell:

  

Es gibt einige Unterstützung für das Lesen und Drucken von Datensätzen in der Schale.         Während der Kompilierung wird Rekord Ausdrücke Tupel expressiven übersetzt         sionen. In Laufzeit ist nicht bekannt, ob ein Tupel repräsentiert tatsächlich eine         Aufzeichnung. Auch sind die Platten Definitionen von Compiler verfügbar verwendet bei         Laufzeit. Also, um den Datensatz Syntax zu lesen und drucken Tupeln als         aufzeichnet, wenn möglich, Plattendefinitionen von dem eingehalten werden müssen         Schale selbst. Die Shell-Befehle zum Lesen, zu definieren, Vergessen,         Auflisten und Druck von Datensatz werden im Folgenden beschrieben. Beachten Sie, dass jeder Job         hat seinen eigenen Satz von Rekord Definitionen. Zur Erleichterung Angelegenheiten Rekord         Definitionen in den Modulen shell_default und USER_DEFAULT (wenn geladen)         jedes Mal, wenn ein neuer Auftrag gestartet werden gelesen. Zum Beispiel das Hinzufügen der Zeile

  -include_lib("kernel/include/file.hrl").
     

zu USER_DEFAULT macht die Definition von file_info leicht verfügbar in   die Schale.

Zur Klarstellung ich einig Beispiel hinzufügen:

Datei foo.hrl:

-record(foo, {bar, baz=5}).

Datei: user_default.erl:

-module(user_default).
-compile(export_all).

-include("foo.hrl").  % include all relevant record definition headers here

 %% more stuff probably ...

Hier kann versuchen, in der Schale:

$ erl
Erlang R13B04 (erts-5.7.5) [source] [smp:2:2] [rq:2] [async-threads:0] [hipe] [kernel-poll:false]

Eshell V5.7.5  (abort with ^G)
1> #foo{}.
#foo{bar = undefined,baz = 5}

? kennt die Schale über die Aufzeichnung von foo.hrl

Andere Tipps

Die Datei .erlang ausgewertet wird, wenn die Shell gestartet wird, aber es ist nicht im Zusammenhang mit der Shell ausgewertet. Dies bedeutet, dass es nur allgemeine Ausdrücke enthalten kann, die ausgewertet werden und nicht die Shell-Befehle. Leider rr() ist ein Shell-Befehl (es initialisiert lokale Shell Datensätze zu erkennen), so dass es nicht in der .erlang Datei verwendet werden kann.

Während der Benutzer Modul user_default definiert, die vorgeladen werden müssen, können die Dateien enthalten, die unter Verwendung von -include oder -include_lib Datensatz Definitionen enthalten, diese Rekord Definitionen werden dann nur auf Funktionen innerhalb user_default definiert zur Verfügung. user_default wird als normal kompilierte Modul und exportierten Funktionen in ihm sind wie alle anderen Funktionen aufgerufen, so dass die Aufzeichnung Definitionen nicht innerhalb der Schale sichtbar. user_default ermöglicht dem Benutzer, komplexere Funktionen zu definieren, die von innerhalb der Shell als Shell-Befehle aufgerufen werden können.

EDIT:

war ich teilweise falsch hier. Während ich war richtig, wie .erlang ausgewertet wird und wie die Funktionen in user_default genannt habe ich verpasst, wie user_default.erl bei Shell-Start für die Aufzeichnung Definitionen gescannt wird, die in der Schale dann zur Verfügung stehen. Dank @Peer Stritzinger für dieses heraus zeigen.

Setzen Sie es in Datei mit dem Namen .erlang in Ihrem Home-Verzeichnis (siehe Abschnitt 1.7.1 in http://www.erlang.org/documentation/doc-5.2/doc/getting_started/getting_started.html ).

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top