2010-12-07 3 views
7

Pour que mon fichier .sbclrc fonctionne sur les deux ordinateurs que j'utilise, j'aimerais trouver un moyen d'obtenir le nom d'hôte et/ou le système d'exploitation depuis sbcl. Je sais que je pourrais définir et ensuite rechercher une variable d'environnement, mais y a-t-il une approche plus directe?Comment puis-je déterminer le système d'exploitation et le nom d'hôte à l'aide du Lisp commun?

Mise à jour

j'ai changé la question de se référer à Common Lisp, étant donné que la réponse de Ken est pas spécifique à sbcl.

Répondre

17

j'utiliser les fonctions « environment »:

* (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

Merci, je ne sais pas comment je manqué les! –

+0

Bien que ces fonctions soient portables, gardez à l'esprit que dans d'autres implémentations, elles renvoient des choses totalement différentes. Je les ai essayés avec CLisp et j'ai été surpris par la plupart des valeurs de retour. –

+1

Oui, si vous voulez être portable sur les architectures de compilateurs * et *, vous aurez besoin d'un peu plus de travail ici. '* features *' est un peu plus cohérent entre les deux, mais diffère encore, par exemple, SBCL et CLISP définissent ': UNIX' mais seulement SBCL définit': LINUX'. Lorsque vous en avez besoin pour quelque chose de plus qu'un fichier de configuration personnel, la bibliothèque trivial-features est très pratique: 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: J'aime mieux la solution @ Ken. +1

Questions connexes