利用環境がUnixの場合
Mac OS XもUnix環境と同じ操作になります。
事前準備
以下の作業は必須ではないので必要に応じて実施してください。
(1)Tcl/Tk用のディレクトリを作成
自分のホームディレクトリにTcl/Tk用のディレクトリを作る。
$ mkdir tcl-tk
(2)シンボリックリンクの作成
シンボリックリンクの作り方
実行例
# cd /usr/local/bin
# ln -s tclsh8.5 tclsh
# ln -s wish8.5 wish
シンボリックリンクを作成する理由について、補足説明します。
シンボリックリンク(ソフトリンク)はWindowsのショートカットのようなもので、実体へのファイルパスを保存しているファイルです。
Tcl/Tkのインストール先は、使用環境によって違います。デフォルトでは/usr/local以下にインストールされます。
また、Tclの実行ファイルはtclsh8.5、wish8.5のようにリリース番号付きでインストールされます。この場合、8.5→8.6のようにリリース番号の違うTcl/Tkに更新すると、すべてのスクリプトファイルで指定するプログラム名を変更する必要が生じます。
例.スクリプトファイルの1行目
#!/usr/local/bin/tclsh8.5
↓↓↓↓↓ 変更が必要
#!/usr/local/bin/tclsh8.6
すべてのファイルを変更するのは大変なので、これを避けるためにlnコマンドでシンボリックリンクを作っておくと便利です。
シンボリックリンク「tclsh」を作成した場合、スクリプトファイルの1行目を
#!/usr/local/bin/tclsh
と記述しておけば、リリース番号の違うTcl/Tkに更新しても、シンボリックリンクを再設定するだけで済みます。
(3)パスの設定
UNIXではパス設定されていないディレクトリの中にあるプログラムを実行するには、プログラム名の先頭に「./(ドットスラッシュ)」を付けて実行する必要があります。
「./」を付けずに実行させたい場合は、プログラムファイルを保存しているディレクトリのパス設定を行います。
[パス設定]
・Cシェル系(.cshrc .tcshrcなど)
set path = ($path $HOME/tcl-tk)
・Bシェル系(.profile .bashrcなど)
PATH=$PATH:$HOME/tcl-tk
Tclシェルの起動・実行・終了の方法
Tclの起動およびTclコマンドを対話的に実行するには以下のように実施します。
- 端末画面から tclsh を入力する。
- プロンプトが 「%」に変わり、対話的に実行可能な状態になります。
- Tclシェルを終了するには exitコマンドを入力します。
[使用例 : hello, world! と表示する]
$ tclsh
% puts "hello, world!"
hello, world!
% exit
$
ボタンなどのGUI(Tk)のコマンドを入力する場合は 「tclsh」ではなく「wish」を起動させますが、GUIの操作を対話的に実行させることは少ないと思います。
プログラムファイルを実行する
Tclのプログラムファイルを実行するには以下のようにします。
[サンプルプログラム : hello.tcl]
#!/usr/local/bin/tclsh
# hello.tcl
puts "hello, world!"
プログラムファイルを実行させるには、まず、Tclコマンドで手続きを記述したファイルをテキストエディターで作成します。サンプルの hello.tcl は画面に hello,world! を出力するプログラムです。
2行目以降「#」で始まる行はコメント行です。記述しても無視されるので、プログラムに影響は与えません。
実行方法は以下のような方法があります。
(1)tclshの引数にファイル名を指定して起動する
実行例 :
$ tclsh hello.tcl
hello, world!
$
(2)tclsh起動後にsourceコマンドで読み込む
実行例 :
$ tclsh
% source hello.tcl
hello, world!
%
(3)独立したアプリケーションとして実行する
- chmodコマンドで実行許可を与える。(1回のみ実施)
- プログラムの実行。
実行例 :
$ chmod +x hello.tcl
$ hello.tcl または ./hello.tcl
hello, word!
$
(4)Windowプログラムを実行する
messageコマンドを使うとWindow画面に文字列を表示できます。
[サンプルプログラム : hello-w.tcl]
#!/usr/local/bin/wish
# hello-w.tcl
message .msg -width "200" -text "hello, world!"
button .btn -text "終了" -command exit
pack .msg .btn
実行例 : hello-w.tclの実行方法
$ hello-w.tcl &
$
実行すると下記のようなウィンドウプログラムが起動します。
スクリプトファイルの1行目について
UNIX系OSの中には、スクリプトファイルの特別な1行目の長さを制限しているものがあり、パス名の長さがこの制限を越えると文法エラーとなり起動できません。また、環境により、tclsh,wishの場所も違います。
これを回避する方法として、Tclでは以下の記述方法が推奨されています。
サンプルプログラム : hello.tcl
#!/bin/sh
# the next line restarts using tclsh \
exec tclsh "$0" "$@"
puts "hello,world!"
この方法はshとTclのコメントの解釈の違いを利用しています。
- 1行目で sh が起動される。
- 2行目はコメントとして扱われる。末尾の 「\」 は sh では次の行への継続記号として扱われない。
- execコマンドで処理が sh から tclsh へ移る。
shの機能として
“$0” にスクリプトのファイル名が格納される。
“$@” にファイル名の後に記述した引数が格納される。
- Tclでは、末尾に「\」があると、次の行に継続されます。よってtclshへ移った後、3行目の exec は2行目のコメントの継続行として扱われるので無視されます。
ところで、RubyやPythonでは、以下のような記述を見かけます。
「#!/usr/bin/env ruby」、「#!/usr/bin/env python」
Tclでも同じように「#!/usr/bin/env tclsh」を使うことができます。ですが、env のない環境や、以下のように引数があると、引数の解釈が環境により違うようなので、やっぱり、exec を使う方法がお勧めだそうです。
!/usr/bin/env tclsh aaa bbb ccc
[参考:exec magicの元ネタ]
コメント