さくらんぼのlambda日記

lambdaちっくなことからゲーム開発までいろいろ書きます。

Lispで環境変数を取得する

まずはこれから片付けるよ!
なんかThe Common Lisp Cookbookにそのものずばりがありました。
http://cl-cookbook.sourceforge.net/os.html

*1264146917* (defun my-getenv (name &optional default)
    #+CMU
    (let ((x (assoc name ext:*environment-list*
                    :test #'string=)))
      (if x (cdr x) default))
    #-CMU
    (or
     #+Allegro (sys:getenv name)
     #+CLISP (ext:getenv name)
     #+ECL (si:getenv name)
     #+SBCL (sb-unix::posix-getenv name)
     #+LISPWORKS (lispworks:environment-variable name)
     default))
MY-GETENV
*1264146918* (my-getenv "PATH")
"/usr/local/bin:/usr/bin:/bin:/usr/games"

できったー。

さあ、この道具があれば、PATHを指定しなくてすみます。

(defun exec-command (command)
  (with-output-to-string (out)
    (sb-ext:run-program command nil :search (my-getenv "PATH") :output out)))

(exec-command "ls")
"_darcs
clbuild
...
(省略)
...  
sharp-less2.lisp
"

できったー!!