Это очень просто! Скрипт должен прочитать ввод из stdin
(возможно, с gets
) и записать вывод в stdout
(с puts
; это назначение по умолчанию).
Вот очень простой построчный фильтр script:
set lineCount 0
while {[gets stdin line] >= 0} {
incr lineCount
puts stdout "$lineCount >> $line <<"
}
puts "Processed $lineCount lines in total"
Возможно, вы захотите сделать что-нибудь более сложное!
Команда gets
имеет два способа работы. Наиболее полезным здесь является тот, в котором он принимает два аргумента (имя канала, имя переменной), записывает строку, которую он прочитал из канала, в переменную и возвращает количество прочитанных символов или -1, если он имеет EOF (либо блокируется в неблокирующем режиме, либо имеет определенные виды проблем; вы можете игнорировать эти случаи). Это очень хорошо работает со стилем работы, описанным выше в примере скрипта. (Вы можете различить guish неуспешных случаев с eof stdin
и fblocked stdin
, но для этого варианта использования это не нужно.)