2 つの可能性があります。これをパイプライン ( で作成open |...
) として実行し、受信したメッセージを保存して出力することで処理するか、Unixtee
ユーティリティを使用します。2 番目の方法は間違いなく簡単です。
# I like to spell out “update” in full
set cvsUpdStr [exec cvs -qn update | tee /dev/tty]
プログラムはtee
、その標準入力を通常の標準出力と指定されたファイルに送信します。/dev/tty
現在の端末に送信するために使用します。
ただし、出力をcvs
バッファリングするため、出力に長い遅延が発生する可能性があることに注意してください。これは、非端末に出力を送信するときの C ライブラリの I/O 処理のデフォルトの動作にすぎず、すぐに出力が必要な場合に問題になる可能性があります。これを修正するには非常に手間がかかります (Expect を使用することになります)。そのため、出力がバーストしていることに満足している場合は、そのままにしておいてください…</p>
Windows では、別の方法で行う必要があります。
set pipe [open |[list cvs -qn update] "r"]
while {[gets $pipe line] >= 0} {
append cvsUpdStr "$line\n" ;# Note the \n at the end!
puts $line
}
close $pipe ;# Any errors turn up here!
with 構文|[list ...]
は Tcl 用語ではかなり珍しいものですが、この状況で使用するのに適したものです。(「ファイル名」の最初の文字が の場合open
、|
残りの引数は、パイプラインの構築に使用する引数のリストとして扱われます。)