#:g1: trivial-shellの紹介

Posted 2014-06-11 11:30:00 GMT

(LISP Library 365参加エントリ)

 LISP Library 365 の162日目です。

trivial-shellとはなにか

 trivial-shellは、Gary Warren King氏作のCommon Lispからシェルを呼び出すユーティリティです。

パッケージ情報

パッケージ名trivial-shell
Quicklisp
CLiKihttp://cliki.net/trivial-shell
Quickdocshttp://quickdocs.org/trivial-shell
CL Test Grid: ビルド状況trivial-shell | CL Test Grid

インストール方法

(ql:quickload :trivial-shell)

試してみる

 どんな関数があるかは、Quickdocsで確認できます。

 Common Lispの処理系からシェルを呼び出す機能は大抵の処理系には含まれていますが、処理系ごとの違いを吸収して可搬性を向上させようというライブラリです。
trivial-shellが扱っている範囲よりも処理系備え付けのシェル呼び出し機能は多機能だったりしますが、シンプルに扱える範囲に収めているようです。
機能としては、環境変数の取得、シェルのパスの設定、シェルコマンドを呼び出して文字列として取得、タイムアウトの対応、処理系の終了、位のところです。

(trivial-shell:get-env-var "SHELL")
;=>  "/bin/zsh"

trivial-shell:*shell-search-paths* ;=> ("/usr/bin/" "/usr/local/bin/")

(pushnew "/bin/" trivial-shell:*shell-search-paths* :test #'equal)

(trivial-shell:shell-command "ls -l /usr/share/dict/") ;=> "合計 924 ; -rw-r--r-- 1 root root 199 5月 27 20:24 README.select-wordlist ; -rw-r--r-- 1 root root 938848 10月 13 2011 american-english ; lrwxrwxrwx 1 root root 30 4月 21 04:38 words -> /etc/dictionaries-common/words ; lrwxrwxrwx 1 root root 16 10月 13 2011 words.pre-dictionaries-common -> american-english ; " ; "" ; 0

(handler-case (trivial-shell:with-timeout (4) (trivial-shell:shell-command "sleep 5")) (trivial-shell:timeout-error () "timeout")) ;=> "timeout"

(trivial-shell:shell-command "wc /usr/share/dict/words") ;=> " 99171 99171 938848 /usr/share/dict/words ; " ; "" ; 0

(trivial-shell:exit) => 処理系の終了

まとめ

 今回は、trivial-shellを紹介してみました。
処理系の終了については、仕様にないので処理系ごとに終了がexitだったりquitだったりbyeも使えたりしますが、憶えるのが面倒な場合はこれを使ってみても良いかもしれません。どこかにtrivial-quitみたいなものもあったような。

comments powered by Disqus