3

cshでできること

set ignoreeof

または bash tou でできること

export ignoreeof=1

これにより、csh/bash が EOF を無視するようになります。つまり、Ctrl+D で終了したり、ファイルの終わりに達したときに終了しません。

tclsh で同じようにする方法はありますか?

ファイルの終わりに達したときに tclsh が終了しないようにする方法はありますか?

4

4 に答える 4

1

あなたは期待したいかもしれません:これを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 ...

于 2010-09-03T11:16:34.997 に答える
1

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

繰り返しますが、終了時に物事を元に戻す必要があり、それがまったく特別ではないという事実は、他の場所で問題を引き起こす可能性があります。上記のトリックの後、それはただの普通のキャラクターです.

于 2010-09-03T13:19:24.083 に答える
0

tclshにはそのような組み込み機能はありません。

于 2010-09-02T17:02:28.740 に答える
0

trapTclX からコマンドを使用できる場合があります。

于 2010-09-02T16:55:01.300 に答える