Schemeソースファイル名を引数に与えて、シェルからgoshコマンドを起動するとそのソースファイルを読み込んでGaucheが起動できます。では、さらにコマンドライン引数を与えてその値をSchemeスクリプトの中で得るにはどうしたら良いでしょうか?
いくつか方法がありますが、main手続きを書くのが最も明解です。
例:
(define (main args)
...
)
上記の例ではgoshコマンドに与えた引数がリストに変換されてargsという名前で束縛されます。
例えば次のSchemeソースをargtest.scmというファイル名で保存したとします。
(define (main args)
(print args)
)
引数「0 1 2 3 4」を与えてargtest.scmをGauche処理系に読み込ませると次の通りに評価されます。
$ gosh argtest.scm 0 1 2 3 4
(argtest.scm 0 1 2 3 4)
argsの最初の要素はgoshコマンドの最初の引数であるargtest.scmです。以降は空白で区切られたコマンドライン引数が続きます。
mainは特別な手続き
Schemeソースファイルにmain手続きが定義されているとき、Gauche処理系はコマンドライン引数をmain手続きの最初の引数に束縛してmain手続きを評価します。
main手続きが整数の値を返すとき、Gauche処理系は終了ステータスとしてその値をシェルに返します。
例:
(define (main args)
...
0 ;; 正常終了
)
これを利用すると、シェルスクリプトの中からSchemeスクリプトを呼び出して終了ステータスを判定することができます。