デフォルトでTcl/Tkをビルドすると、ファイルが作成されます
tclsh85
wish85
ただし、多くのプログラムはtclsh
and を呼び出しますwish
。これはそのための1つの修正です
cp tclsh85 tclsh
cp wish85 wish
ただし、おそらく引数を使用して、単純tclsh
に直接ビルドできますか?wish
configure
この動作は、複数のバージョンのインタープリターとそのライブラリーがシステム内で共存できるため、正しいことです。次に、システムは、バージョンの 1 つを「デフォルト」として「祝福」する方法を提供します。たとえば、Debian は「代替」を提供します。本質的に、通常、「正規の」名前のシンボリックリンクが作成され、/usr/bin/tclsh
→のように実際の実行可能ファイルを指し/usr/bin/tclsh85
ます。また、ランタイムの正確なバージョンを気にしないアプリケーション向けのシンボリックリンクを介して「祝福された」バージョンを利用できるため、他の特定のアプリケーションは、インタープリターの実際の実行可能ファイル名を参照して、特定のランタイムバージョンを選択できます。
これにより、実験的なランタイム バージョンに対して既存のプログラムをテストする簡単な方法も提供されます。インタープリターを選択するためにシバンに依存する通常のように実行する/usr/bin/tclsh86 /path/to/the/script.tcl
代わりに、実行するだけです。/path/to/the/script.tcl
昔は、TclとTkのビルドはあなたが説明した方法で機能していました。複数のバージョンがよりスムーズに共存できるように、現在のシステムに変更されました(名前にバージョン番号が含まれています)。これは当時のユーザーコミュニティからの非常に強い要求でした。
使用するバージョンの制御をあきらめたい場合は、バージョンのないファイル名を実際のファイル名にシンボリックリンクします(またはディストリビューションのメカニズムを使用します)。または、ファイルの先頭にあるこの(かなり恐ろしい)混合シェル/Tclコードを使用します。
#!/bin/sh
# Try with a versionless name \
exec tclsh "$0" ${1+"$@"}
# Otherwise, try with tclsh8.6 \
exec tclsh8.6 "$0" ${1+"$@"}
# Otherwise, try with tclsh8.5 \
exec tclsh8.5 "$0" ${1+"$@"}
# Otherwise, try with tclsh8.4 \
exec tclsh8.4 "$0" ${1+"$@"}
# Otherwise... well... give up! \
echo "no suitable Tcl interpreter" >&1; exit 1
これは、Unixシェルとは異なり、\
Tclがコメント行の最後にあるaを、コメントが次の行に拡張されることを意味するものとして扱うという事実に依存しています。
(私自身?最近は普段は#!
列に並べないので、書くのは面倒だとは思いませんtclsh8.5 myscript.tcl
。)