cshでできること
set ignoreeof
または bash tou でできること
export ignoreeof=1
これにより、csh/bash が EOF を無視するようになります。つまり、Ctrl+D で終了したり、ファイルの終わりに達したときに終了しません。
tclsh で同じようにする方法はありますか?
ファイルの終わりに達したときに tclsh が終了しないようにする方法はありますか?
あなたは期待したいかもしれません:これをtclsh.expとして保存してください
#! /usr/bin/env expect
log_user 0
spawn tclsh
if {[llength $argv] > 0} {
send -- "set argv [list [lrange $argv 1 end]]; source [lindex $argv 0]\r"
}
interact
次に実行しますtclsh.exp somefile.tcl arg arg ...
tclsh がスクリプトを実行している場合、stdin で EOF を検出しても終了しません。これは純粋に組み込みの REPL の機能です。を使用してそのような状態を自分で検出できますeof stdin
。その時点で、それに対して何をすべきかを決定できます。
Ctrl+を EOF にしないようにしたい場合D、最も簡単な方法は、次のように端末を raw モードにすることです。
set sttySettings [exec stty -g <@stdin]
exec stty -echo raw <@stdin
完了したら、次のように切り替えます。
exec stty $sttySettings <@stdin
プログラムが終了する前に必ず元に戻してください!
もう 1 つは、生の入力を使用している場合、すべての行編集を自分で処理する必要があることです。これを行う便利な方法は、Tcler's Wiki のこの例のような純粋な Tcl readline に似たシステムを使用することです。CtrlやりDたいことを実行するには、少し調整する必要があるかもしれません。
別の方法は、これを行うことです。これは、物事をクックドモードのままにし、Ctrl+をD非特別にするだけです(OSXでテスト済み):
exec stty eof "" <@stdin
繰り返しますが、終了時に物事を元に戻す必要があり、それがまったく特別ではないという事実は、他の場所で問題を引き起こす可能性があります。上記のトリックの後、それはただの普通のキャラクターです.
tclshにはそのような組み込み機能はありません。
trap
TclX からコマンドを使用できる場合があります。