[Top]

My Tcl/Tk page

自作したTcl/Tkスクリプト置場です。


[前] MacOSX で Tcl/Tk を使う(10.3 Panther まで)

Tcl/Tk スクリプトの起動

そしていよいよ Tcl/Tk を使ったスクリプトをどのようにして 書くか、という話になります。

[Table of Contents]

シバンは、なんかうまくいかない

Unix 一般に当てはまる話なんですけど、スクリプトを書く場合、 その一行目にスクリプトを読み込ませたいコマンド名をフルパスで 書いておく、たとえば今回の場合ですとこう:

#!/usr/bin/wish -f
こう書いておけば「クリック一発で起動可能な Tcl/Tk スクリプト」になって くれるのが普通です(一行目の #! で始まる行は「シバン」[Wikipedia] という名前があるみたいです)。つまり Unix系システムでは、スクリプト(test.tk という名前を付けたと仮定します)の先頭に たとえば このように書いた行を入れておくと(さらにファイルに実行属性をつけておくと)、コマンドラインから
% ./test.tk
このように実行するだけで、スクリプトの一行目の記述に基づいて
% /usr/bin/wish -f ./test.tk
こう入力したのと同じ動作をするようになります。

 んで、Macintosh も OS X からは Unix 系システムに移行しましたので、たぶん これと同じやり方ができるのでは? と思ってやってみると、 こんなエラーが出る訳です:

 RegisterProcess failed (error = -50)
 Abort trap
こんなメッセージが出るだけで、思ったとおりに起動してくれません。 この "error = -50" というのが何なのかがよくわかりません ので、どこにどう問題があるのかさえ見当がつきません‥

[Table of Contents]

起動用スクリプトを別途用意(しぶしぶ)

そこで Windows と同じように、「Tcl/Tkスクリプトそのもの」と 「Tcl/Tkスクリプトを起動させるコマンドを書き込んだファイル (DOS/Windowsでいうところのバッチファイルに相当)」の 2つを用意して対処することにします(右図)。それぞれ、こんな感じです:

tcl-test.command:
 #! /bin/sh
 /usr/local/wish -f ${HOME}/Desktop/tcl-test.tcl
 exit
tcl-test.tcl:
 label .x1 -text "ここんにちは"
 pack .x1

 button .b1 -text "Quit" -command { exit }
 pack .b1
注意点:
tcl-test.command のほうには忘れずに実行属性をつける
(「ターミナル」から chmod u+x ~/Desktop/tcl-test.command を実行)
tcl-test.tcl の文字コードは utf-8 (いわゆる「ユニコード」)にしておく
(Emacs の場合 C-x RET f utf-8 とすれば utf-8 になります)
これで tcl-test.command をダブルクリックしてみましょう。 すると右図のようなウィンドウが表示されたはずです。 ここまできたら Mac OS X 上での Tcl/Tk 環境の準備は OK! ‥のはずです。