環境変数の設定


環境変数設定ダイアログボックス

本格的なスクリプト言語に対応するawk)、perlpythonruby)の4つのGUIフロントエンドとpipeline)では、「opt保存」ボタンの下に「環境変数」ボタンが用意されており、それを押すと「環境変数設定」ダイアログボックスがオープンされるようになっています。これらのフロントエンドに対応するコマンド行プログラムは、プログラム自身が環境変数を参照するとともに、スクリプトのなかでも環境変数を参照できます。GUIフロントエンドで環境変数を操作できなければ、結局、MS-DOS/コマンドプロンプトウィンドウの力を借りなければならなくなってしまうでしょう。そういうわけで、このようなダイアログを用意しました。なお、このダイアログはモードレスですので、クローズしなくても、メインダイアログは操作できます。このダイアログは、基本的にメインダイアログのすぐ右に表示されます。

環境変数」ボタンをクリックすると、次のような「環境変数設定」ダイアログボックスが表示されます。このダイアログボックスは、上半分の「全体」と下半分の「ここで定義したもの」の2つの部分に分かれます。

 

 

GUIフロントエンドを初めて起動したとき、「全体」にはGUIフロントエンドが親プロセス(エクスプローラや)から与えられたすべての環境変数が表示され、「ここで定義したもの」には何も含まれていません。「ここで定義したもの」には、この状態から追加、削除、編集した環境変数が表示されます。

追加ボタン

追加」ボタンを押すと、次のようなダイアログボックスが表示されます。

 

 

名前」に環境変数の名前、「」にその環境変数の値を入力して、「OK」ボタンを押すと、「ここで定義したもの」に入力したばかりの変数名と値が表示されます。そして、入力した名前がすでに「全体」に表示されているものでなければ、「全体」にもその変数の項目が追加されます。入力した名前がすでに「全体」に表示されているものであれば、値だけが変更されます。

編集ボタンとアイテムダブルクリック

全体」または「ここで定義したもの」のなかの変数名を選択して「編集」ボタンを押すか、ダブルクリックすると、次のようなダイアログボックスが表示されます。

 

 

追加」ボタンを押したときに表示されたダイアログボックスと同じですが、変数の名前は編集できません。「OK」ボタンを押すと、「全体」及び「ここで定義したもの」のその変数の値は、ダイアログボックスで編集した内容に変わります。「全体」のアイテムを編集したときで、そのアイテムが「ここで定義したもの」に含まれていない場合には、「ここで定義したもの」にもアイテムが追加されます。「」としては空文字列も認める仕様になっています。「全体」から削除して「ここで定義したもの」にしか含まれないアイテムを選択してこのダイアログボックスを表示し、「OK」ボタンを押すと、たとえ「」を編集していなくても、空文字列を値とする形で「全体」にその変数が追加されます。

削除ボタンと[Delete]キー

全体」のなかの変数名を選択して「削除」ボタンを押すか、[Delete]キーを押すと、その環境変数は「全体」からは消え、「ここで定義したもの」に値なしの変数名が追加されます。

ここで定義したもの」のなかの変数名を選択して「削除」ボタンを押すか、[Delete]キーを押すと、その定義は削除され、元の状態になります。つまり、「全体」にもともと含まれておらず、ここでの操作で追加された環境変数は、「全体」からも「ここで定義したもの」からも削除されて消えてなくなります。「全体」にもともと含まれていたのに、削除された環境変数は、「全体」のアイテムとして復活します。「全体」にもともと含まれており、編集によって値が変更された環境変数は、元の値に復元されます。いずれにしても、「ここで定義したもの」からはそのアイテムは削除されます。

操作できない環境変数

環境変数TMPとして有効なディレクトリが指定されていないと、PCKはコマンド行プログラムの出力を格納できなくなってしまいますので、環境変数TMPの内容を変更、削除することはできません。また、以外のGUIフロントエンドでは、スクリプトパス環境変数(ならawkdirならperldirならpythondirならrubydir)を書き換えようとすると、次のようなエラーメッセージが表示されます。

 

 

設定の保存とエキスポート

このようにして「環境変数設定」ダイアログボックスで設定した環境変数の内容は、pipeline)以外のGUIフロントエンドでは、終了時にレジストリのHKEY_CURRENT_USER\Software\Longtail\cmdline\???キー(???は個々のフロントエンドの名前)のEnvに保存されます。そして、次にGUIフロントエンドを起動したときには、与えられた環境変数にその内容を自動的に追加します。ですから、一度終了して再起動しても、「環境変数設定」ダイアログボックスの内容は基本的に同じになります。基本的にというのは、唯一例外があるからです。名前だけがあって値が空のエントリは、削除を指定したのと同じように扱われます。もし、値が空の環境変数が本当に必要であれば、「ここで定義したもの」からその変数を選択し、「編集」ボタンを押して、「環境変数編集」ダイアログボックスを「OK」ボタンでクローズしてください。

GUIフロントエンドで編集した環境変数の内容は、他のGUIフロントエンドにエキスポートしたときに、それらのGUIフロントエンドにコピーされます。「(bat保存」コマンドを選択したときには、バッチファイルにsetコマンドが書き込まれます。そのバッチファイルをロードすると、書かれている環境変数がGUIフロントエンドに追加されます。

レジストリに保存されている設定がある場合、の「起動ボックス」の「パイプへ」ボタンでのメインダイアログのリストにアイコンを追加したときに、レジストリの設定がにコピーされます。このような形で同じ名前の環境変数の設定を複数回移動した場合、移動処理が行われるたびに、前の値は捨てられ、新しい値が残ります。

の場合、追加された環境変数は、のメインダイアログの「クリア」ボタンを押すとすべて消去され、起動されたときの環境変数設定に戻ります。の場合、メインダイアログの「optクリア」ボタンを押すと、レジストリから読み出したものも含め、追加されたすべての環境変数が消去され、親プロセスから与えられた環境変数設定に戻ります。

の「起動ボックス」からGUIフロントエンドを起動した場合、そのGUIフロントエンドの親プロセスはということになりますが、の環境変数は上記のような操作によって大きく変わっている場合があります。しかし、は起動されたときの環境変数の設定を内部に保存しており、「起動ボックス」からプログラムを起動するときには、そのときのの環境変数設定ではなく、起動時の環境変数設定を使います。ですから、「起動ボックス」から起動されたプログラムの環境変数は、どれも同じです(レジストリに保存された設定を持つを除く。ただし、これらについても、「環境変数設定」ダイアログボックスの「ここで定義したもの」のアイテムをすべて削除すれば同じになります)。

での環境変数の設定

今までに取り上げたGUIフロントエンドのほか、(cmdline)(sb)(tv)でも環境変数を設定できます。たとえば、次のようなコマンド行を入力して「OK」ボタンを押せば

 

set cmdline=test

 

testという値を持つcmdlineという変数を設定できます。また、次のようなコマンド行を入力して「OK」ボタンを押すと、

 

set cmdline=%TMP%\test

 

%TMP%の部分が環境変数TMPの内容に置き換えられた形でcmdline変数が設定されます。さらに、次のようなコマンド行を実行すれば、

 

set cmdline=

 

今設定したばかりのcmdline変数を削除できます(でもTMP変数を削除することはできません)。しかし、には「環境変数設定」ダイアログボックスはありません。で有効な環境変数のリストは、次のコマンド行を実行すれば、

 

set

 

テキストエディタ内に表示されます。で設定した環境変数もpipeline)に移動することができます。しかし、awk)、perlpythonruby)とは異なり、レジストリに保存することはできません。