Next: , Previous: , Up: Image Files   [Contents][Index]


14.7 Running Image Files

-i フラグを使用したデフォルトの gforth.fi の代わりに、 イメージ・ファイル image を使用して Gforth を呼び出すことができます(see Invoking Gforth):

gforth -i image

オペレーティング・システムが #! ... 形式の行によるスクリプトの開始をサポートしている場合は、 イメージ・ファイル名を入力するだけで、 そのイメージ・ファイルで Gforth を起動できます(ファイル拡張子 .fi は単なる慣例であることに注意してください)。 つまり、 イメージ・ファイル image を使用して Gforth を実行するには、 gforth -i image の代わりに image と入力するだけです。 これが機能するのは、すべての .fi ファイルが以下の形式の行で始まるためです:

#! /usr/local/bin/gforth-0.4.0 -i

この行で指定された Gforth エンジンのファイルとパス名は、 そのエンジンがビルドされた特定の Gforth 実行可能ファイルです。 つまり、 gforthmi が実行されたときの環境変数 GFORTH の値です。

同じシェル機能を利用して、 Forth ソース・ファイルを実行可能ファイルにできます。 たとえば、 以下のテキストをファイルに配置します:

#! /usr/local/bin/gforth

." Hello, world" CR
bye

そして、 ファイルを実行可能にすると(Unix の場合は chmod +x)、 コマンド・ラインから直接実行できます。 シーケンス #! は 2 つの側面から使用されます。 まず、 オペレーティング・システムによって「マジック・シーケンス」として認識され37、 次に Gforth によってコメント文字として扱われます。 2 番目の使用法のため、#! と実行可能ファイルへのパスの間に空白が必要です(さらに、 一部の Unix ではシーケンス #! / が必要です)。

ほとんどの Unix システム(Linux を含む)は、 バイナリ名の後​​に 1 つのオプションだけをサポートします。 それでも十分でない場合は、 以下のトリックを使用できます:

#! /bin/sh
: ## ; 0 [if]
exec gforth -m 10M -d 1M $0 "$@"
[then]
." Hello, world" cr
bye \ caution: this prevents (further) processing of "$@"

最初に、 このスクリプトはシェル・スクリプトとして解釈され、 最初の 2 行が(ほとんど)コメントとして扱われ、 次に 3 行目が実行されると、 このスクリプト ($0) をパラメータとして、 そのパラメータを追加パラメータ ("$@") として gforth を呼び出します。 さらに次に、 このスクリプトは Forth スクリプトとして解釈され、 最初にコロン定義 ## が定義され、 次に [then] までのすべてが無視され、 最後にそれに続く Forth コードが処理されます。 あなたは以下を使用することもできます

#0 [if]

2 行目ですが、 これは Gforth-0.7.0 以降でのみ機能します。

gforthmi のアプローチは最も高速で、 シェル・ベースのアプローチは最も遅くなります(追加のシェルを起動する必要があるため)。 シェル・アプローチの追加の利点は、 Gforth バイナリ が $PATH 内にある限り、 Gforth バイナリがどこにあるかを知る必要がないことです。

#! ( ) gforth-0.2 “hash-bang”

\ の alias です。


Footnotes

(37)

Unix シェルは実際には 2 種類のファイルを認識します。 それは実行可能ファイルとデータ・ファイルです。 データ・ファイルは「インタプリタ行」で指定されたインタプリタによって処理されます。 このインタプリタ行は、 シーケンス #! で始まるデータ・ファイルの最初の行です。 インタプリタ行で指定できる文字数には小さな制限(例: 32)がある場合があります。