如何在 unix 管道中使用 Tcl 脚本?

How to use Tcl script in unix pipeline?

想在 Unix 管道中使用一些自定义函数(用 tcl 编写),即 grep patt file.rpt | tclsh summary.tcl如何使 tcl 脚本像普通的 unix 命令一样从管道获取输出、处理和输出?

这很简单!该脚本应从 stdin(可能使用 gets)读取输入并将输出写入 stdout(使用 puts;这是默认目标)。

这是一个非常简单的行过滤器脚本:

set lineCount 0
while {[gets stdin line] >= 0} {
    incr lineCount
    puts stdout "$lineCount >> $line <<"
}
puts "Processed $lineCount lines in total"

您可能想做一些更复杂的事情!


gets命令有两种工作方式。这里最有用的是它接受两个参数(通道名称、变量名称)的那个,将从通道读取的行写入变量,returns 读取的字符数 或者 -1 当它有一个 EOF (或者会在非阻塞模式下阻塞,或者有某些类型的问题;你可以忽略这些情况)。这与上面示例脚本中描述的工作风格非常相配。 (您可以使用 eof stdinfblocked stdin 来区分非成功案例,但对于此用例不需要。)