いわゆる Perl で言うところの、
# 外部コマンドの実行結果を # 文字列で変数に代入 my $result = `ls -a`;
を CLISP でやろうと思って色々調べた結果をメモしておく(ちょっとハマった)。
環境は CLISP + Mac OS X 10.9
;; 補助関数 (defun copy-stream (in out) (loop for line = (read-line in nil nil) while line do (write-line line out))) ;; 本体 (defun cmd-output-to-string (cmd) (with-open-stream (strm ; shell や run-program cmd '(cmd-args) はうまくいかない (ext:run-shell-command cmd :output :stream)) (with-output-to-string (out) (copy-stream strm out)))) ;; 省略形 ;; 且つ、文末の改行を削除(chomp) (defun cmd (cmd) (string-right-trim '(#\newline) (cmd-output-to-string cmd)))
参考:
構文はここで拾った。
running shell commands with gnu clisp – Stack Overflow
バグフィックスはこちらを参考にした。
家に帰ったらCommon Lispのコードを書いてみた。 – 週記くらい