如何将grep输出通过管道传入Tcl标准输入?
解决Tcl脚本读取管道全量输出的问题
当然可以通过在gets stdin外添加while循环解决这个问题,你的原脚本只执行了一次gets stdin,所以只能读取grep输出的第一行。
修改后的lint.tcl脚本可以这样写:
#! /usr/bin/tclsh set a [list] while {[gets stdin line] >= 0} { lappend a $line } puts [join $a \n]
说明
while {[gets stdin line] >= 0}:gets命令会从标准输入读取一行到变量line,返回读取到的字符数;当到达输入末尾(EOF)时返回-1,循环终止。- 循环内每次读取一行就追加到列表
a中,最后用join拼接并输出所有行。
如果你不需要收集所有行,只是想逐行处理或直接输出,也可以简化成:
#! /usr/bin/tclsh while {[gets stdin line] >= 0} { puts $line }
这样就能完整读取并输出grep通过管道传递的所有内容了。
内容的提问来源于stack exchange,提问作者kil47
相关产品推荐
相关产品推荐

