0

これは以前に尋ねられたことを知っています。

でも一度聞いてくれ…

Cisco ルーター (IOS) を使用しています。

いくつかのコマンドを実行し、その出力をファイルにリダイレクトするスクリプトを作成する必要があります。しかし、 for every コマンドを使用する代わりにtee、ファイルを開いてからコマンドを実行すると、出力がファイルにリダイレクトされてからファイルが閉じます。

また、リダイレクト演算子でさえ機能して>いないか、次の答えがあります。

stdout を tcl のファイルにリダイレクトするにはどうすればよいですか

4

1 に答える 1

3

その質問の解決策が役に立たないという事実は有益です。実際に発生している問題は、Tcl コマンドが通常、いずれにせよ書き込みを行わないことstdoutです (ただしputs、それを主な仕事とする とparrayputs内部で使用するプロシージャ)。慣れ親しんだ「への書き込みstdout」は、対話型 Tcl シェルのみの機能です。

スクリプトの実行中にすべてのコマンドの結果を取得するには、次のようなラッパーが必要です。

trace add execution source leavestep log_result
proc log_result {cmd code result op} {
    puts stdout $result
}
source theRealScript.tcl

大量の出力が生成されることがわかります。出力を削減することはかなり便利なことなので、これにより、すぐに実行されるコマンドだけに削減されます (呼び出されるすべてのコマンドではなく)。

trace add execution source enterstep log_enter
trace add execution source leavestep log_result
proc log_enter {args} {
    global log_depth
    incr log_depth
}
proc log_result {cmd code result op} {
    global log_depth
    if {[incr log_depth -1] < 1 && $result ne ""} {
        puts stdout $result
    }
}
source theRealScript.tcl

おそらく、必要以上の出力が得られるでしょう…</p>

于 2014-06-16T09:05:14.047 に答える