2010-12-07 3 views
7

Um meine .sbclcrc-Datei auf den zwei Computern, die ich verwende, zu bekommen, möchte ich den Hostnamen und/oder das Betriebssystem von sbcl beziehen. Ich weiß, dass ich eine Umgebungsvariable einstellen und dann suchen kann, aber gibt es einen direkteren Ansatz?Wie kann ich das Betriebssystem und den Hostnamen mit Hilfe der allgemeinen Lisp ermitteln?

aktualisieren

änderte ich die Frage zu Common Lisp zu beziehen, da die Antwort von Ken SBCL nicht spezifisch ist.

Antwort

17

Ich würde verwenden, um die ‚environment‘ Funktionen:

* (machine-instance) 
"myhostname" 
* (machine-type) 
"X86-64" 
* (machine-version) 
"Intel(R) Core(TM)2 Quad CPU Q6600 @ 2.40GHz" 
* (software-type) 
"Linux" 
* (software-version) 
"2.6.32-3-amd64" 
+0

Vielen Dank, ich weiß nicht, wie ich diese verpasst! –

+0

Obwohl diese Funktionen portabel sind, bedenken Sie, dass sie in anderen Implementierungen völlig unterschiedliche Dinge zurückgeben. Ich habe sie mit CLisp ausprobiert und war von den meisten Rückgabewerten überrascht. –

+1

Ja, wenn Sie sowohl über Compiler * als auch * Architekturen portierbar sein wollen, brauchen Sie hier ein bisschen mehr Arbeit. '* features *' ist etwas konsistenter zwischen den beiden, unterscheidet sich aber immer noch, z.B. definieren sowohl SBCL als auch CLISP ': UNIX', aber nur SBCL definiert': LINUX'. Wenn Sie es für etwas mehr als eine persönliche Konfigurationsdatei benötigen, ist die Trivial-Features-Bibliothek sehr praktisch: http://www.cliki.net/trivial-features – Ken

1
* (require :sb-bsd-sockets) 
("SB-BSD-SOCKETS" "SB-GROVEL" "ASDF") 

* (use-package :sb-bsd-sockets) 
T 

* (host-ent-name (get-host-by-name "localhost")) 
"myhost.mydomain.ext" 

* (find :win32 *features*) 
:WIN32 

* (find :linux *features*) 
NIL 

EDIT: Ich mag @ Ken Lösung besser. +1.

Verwandte Themen