明らかに欠けているものがあるような気がしますが、これまでの検索は無駄に終わっています。
tcl/expect スクリプトを使用して tclsh インタラクティブ シェルを起動し、テスト用のユーティリティを簡単にリロードする手順を追加してから、通常の制御を私に戻そうとしています。
これまでのところ、Tcl インタラクティブ シェルを「使用可能」にするために私が発見した 1 つの方法は、矢印キーなどを使用できるように「rlwrap」で起動することです。
そこで、次のスクリプトを試してみましたが、rlwrap に関する何かが原因で、interact コマンドがヒットしたときに以前の出力が stdout にダンプされます。
これが起こらないようにするために私にできることはありますか?
コード:
package require Expect
puts "Tcl version : [info tclversion]"
puts "Expect version: [exp_version]"
log_user 0
spawn -noecho rlwrap tclsh
# Create procedure to easily reload utilites after changes have been made
expect "% "
send {
proc reload {} {
# Procedure to reload utility source easily for testing
}
}
# Source utilities
expect "% "
send "reload\r"
send_user "\nUse 'reload' procedure to re-source utility files\n\n"
log_user 1
interact
出力:
Tcl version : 8.4
Expect version: 5.43.0
Use 'reload' procedure to re-source utility files
proc reload {} {
# Procedure to reload utility source easily for testing
}
% reload
%
何らかの理由で、proc 定義と reload コマンドの入力をエコーしている可能性があります。これは、対話が発生するとすぐに発生します。対話を「終了」に置き換えると、この出力は表示されません。
もちろん、私が期待している出力は次のようになります。
Tcl version : 8.4
Expect version: 5.43.0
Use 'reload' procedure to re-source utility files
%