如何在 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 stdin
和 fblocked stdin
来区分非成功案例,但对于此用例不需要。)
想在 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 stdin
和 fblocked stdin
来区分非成功案例,但对于此用例不需要。)