色々試してみる

今日も家人はお出かけ。ムスコ君と留守番。
とりあえずスクリプト化するにはどうすれば良いか。以下なカンジで書いてみた

#!/usr/bin/gosh

(define main
  (lambda (args)
    (display "hello world\n")))

*** ERROR: wrong number of arguments for #<closure main> (required 0, got 1)
Stack Trace:
_______________________________________

と叱られる。ここ確認入れて以下に修正。

#!/usr/bin/gosh

(define main
  (lambda (args)
    (display "hello world\n")))

動いた。

次はコマンド実行させてみる

サンプル的には以下??

#!/usr/bin/gosh

(use gauche.process)

(define main
  (lambda (args)
    (let ((x (process-output->string '(uname -smp))))
      (display x)
      (newline))))

最初、use してなくってナニでしたが uname が実行されて戻りが格納されている。以下にしてみたら??

#!/usr/bin/gosh

(use gauche.process)

(define main
  (lambda (args)
    (let ((x (process-output->string-list '(uname -smp))))
      (display x)
      (newline))))

リストで戻ってきています。

(Linux i686 unknown)

これって car は Linux なんだろうか、と思い car のみを出力させてみましたが、Linux ではありませんでしたな。
で、リファレンスには

内部的には、command は call-with-input-process により実行されます。キーワード引数は call-with-input-process にそのまま渡されます。

と、ある。

ちょい休憩

内部的に呼び出されているナニを遡り中に煮つまったので昼寝。しかもそのまま夕食の買い物に行って晩メシ作って食って今に至る。
こんなコトできるかな、と以下。

#!/usr/bin/gosh

(use gauche.process)

(define l '((uname -sm)))

(define main
  (lambda (args)
    (let ((x (process-output->string-list (car l))))
      (display x)
      (newline))))

当たり前ですが正常動作。こーゆーナニをリモホから起動依頼して、結果をリモホに戻せればナニ。プロトコルもなんですが、何を渡してあげれば良いのかがイメージできぬ。