tclshでBash(シェル)のようなコマンド履歴機能を使うには

Tclインタプリタにはコマンド履歴機能がありません。この記事ではtclshとrlwrapコマンドを組み合わせてヒストリ機能を使う方法を紹介します。

Tclを対話的に実行する

tclshを引数なしで実行するとTclインタプリタが起動し、Tclコマンドの入力待ち状態になります。この状態でTclコマンドを入力する事で対話的にコマンドを実行する事ができます。

この機能はコマンド動作のちょっとした確認をする際に便利です。しかし、TclインタプリタにはBash(Unixシェル)のようなコマンド履歴機能がなかったり、左右の矢印キーでコマンドライン上を移動できないのでシェルとしては使いやすいとは言えません。

[実行例]

$ tclsh
% set x hello!
hello!
% puts $x
hello!
% ^[[A   ← 上矢印キーを押すとこのようになります。

上矢印キーを押すと実行例のように「 ^[[A 」が表示されコマンド履歴を表示する事ができません。

※WindowsのコマンドプロンプトやPowerShellでは上矢印キーでコマンド履歴を表示します。

Bash、tcsh、zshのようなUnixシェルにはコマンド履歴機能(ヒストリ機能)があり、カーソルキーで過去に入力したコマンドを呼び出す事ができます。

これと同じ機能がtclshを起動した時にも使えるようにする方法を紹介します。

tclshとrlwrapコマンドを組み合わせて使う

tclshとrlwrapコマンドを組み合わせる事により矢印キーでコマンド履歴を呼び出せます。

[実行例]

$ rlwrap tclsh
% set x hello!
hello!
% puts $x
hello!
% puts $x ←上矢印キーを押すと直前のコマンドを表示します。

環境設定ファイルに以下の設定を追加する事で、rlwrap を入力せずに済みます。

Bシェル系

alias tclsh='rlwrap tclsh'

Cシェル系

alias tclsh 'rlwrap tclsh'

環境設定ファイルは、.profile、.bashrc、.cshrcなど。自分の環境に合わせてください。

rlwrapの詳し使い方はman rlwrap などで調べてください。

rlwrapのインストール

rlwrapがない場合はインストールしてください。

[実行例]

$ rlwrap tclsh
bash: rlwrap: コマンドが見つかりませんでした...

[CentOS 7 の例]

$ sudo yum -y install rlwrap

[FreeBSDの例]

# pkg install rlwrap

CentOSの場合、EPEL(Extra Packages for Enterprise Linux)が使える環境でないとインストールできません。その場合、次の項目を参照してください。

EPELのインストール

$ sudo yum install epel-release

上記でインストールできな場合は、次のようにEPELのソースをダウンロードしてインストールしてください。

[EPELのダウンロード]

$ sudo wget https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm

[EPELのインストール]

$ sudo rpm -ivh epel-release-latest-7.noarch.rpm

[EPELリポジトリを有効化する]

$ sudo yum-config-manager --enable epel

EPEが使えるようになったら次のコマンドでrlwrapをインストールします。

[rlwrapコマンドのインストール]

$ sudo yum -y install rlwrap

コメント

タイトルとURLをコピーしました