OSDN Git Service

残りの流し込み。10章未翻訳部分途中まで翻訳.
[omake-japanese/omake_trans.git] / osh.rst
1 .. 15-osh
2
3 .. _label15:
4
5 15. OSHシェル
6 ==================================
7 OMakeはまた、独立して動くコマンドラインインタープリタ ``osh`` を含んでいます。これはインタラクティブなシェルとして使うことができます。このシェルはomakeと同様の文法で使うことができ、さらにWin32を含む、omakeがサポートしているすべてのプラットフォーム上で同様の機能を提供します。
8
9 .. index::
10    single: prompt
11    single: ignoreeof
12 .. _label15.1:
13
14 15.1 起動時
15 ----------------------------------
16 起動時に、oshは存在しているのであれば ``~/.oshrc`` を読み込みます。このファイルの文法は ``OMakefile`` と同様です。また、以下の追加された変数は、osh上で重要な意味を持ちます。
17
18 * **prompt**
19   
20   ``prompt`` 変数はコマンドラインプロンプトを指定します。この変数は単純な文字列を指定できます。 ::
21   
22       prompt = osh>
23   
24   あるいは、引数をもたない関数として定義することもできます。 ::
25   
26       prompt() =
27           return $"<$(USER):$(HOST) $(homename $(CWD))>"
28   
29   後者のプロンプトの例は以下のようになります。 ::
30
31       <jyh:kenai.yapper.org ~>cd links/omake
32       <jyh:kenai.yapper.org ~/links/omake>
33   
34   プロンプト上にターミナルのエスケープ文字のような『見えない』文字を含ませたい場合は、 ``prompt-invisible`` 関数( :ref:`label10.11.26` )を使ってラップさせなければなりません。例えば、サポートしているターミナル上でプロンプトを太字にしたい場合、以下のように書くことができます。 ::
35
36         prompt =
37            bold-begin = $(prompt-invisible $(tgetstr bold))
38            bold-end = $(prompt-invisible $(tgetstr sgr0))
39            value $(bold-begin)$"osh>"$(bold-end)
40
41 * **ignoreeof**
42   
43   ``ignoreeof`` が ``true`` の場合、 ``osh`` はターミナルの"end-of-file(EOF)"で終了しません(Unixシステム上では通常 ``^D`` となります)。
44
45 .. index::
46    single: Shell
47 .. _label15.2:
48
49 15.2 エイリアス
50 ----------------------------------
51 コマンドのエイリアスは ``Shell.`` オブジェクトに関数を追加することによって定義できます。以下のエイリアスは ``-AF`` オプションを ``ls`` コマンドに追加します。 ::
52
53     Shell. +=
54        ls(argv) =
55           "ls" -AF $(argv)
56
57 クオートされたコマンドはエイリアス展開の影響を受けません。 ``"ls"`` のようにクオーテーションをつけることで、再帰的にエイリアスとなることを防ぎます。
58
59 .. _label15.3:
60
61 15.3 インタラクティブな文法(syntax)
62 -------------------------------------
63 ``osh`` でのインタラクティブな文法はインデントという一つの例外を除いて、 ``OMakefile`` の文法と同様です。まず、インデントされたブロックの前にある行は、必ず行の終わりにコロン:をつける必要があります。次に、 ``.`` を行の終わりにつけるか ``^D`` を使うことで、対象のブロックを終了させます。以下の例では、最初の行の ``if true`` はコロンをつけていないため、内容のブロックを持つことはできません。 ::
64
65    # 以下のifは内容を持ちません
66    osh>if true
67    # 以下のifは内容を持ちます
68    osh>if true:
69    if>       if true:
70    if>          println(Hello world)
71    if>          .
72    Hello world
73
74 インデントされたブロックの中にいる際には、プロンプトをいくらか修正する必要があり、かつ ``osh`` は自動的にテキストをインデントすることに注意してください。
75
76 また、コロン修飾子はファイルにも適用できますが、必須ではありません。