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