Как использовать скрипт Tcl в unix конвейере? - PullRequest
1 голос
/ 23 января 2020

Хотите использовать некоторые пользовательские функции (написанные на tcl) в Unix pipe ie grep patt file.rpt | tclsh summary.tcl. Как заставить tcl-скрипт принимать выходные данные из конвейера, обрабатывать и выводить из командной строки, как обычную команду unix?

1 Ответ

2 голосов
/ 23 января 2020

Это очень просто! Скрипт должен прочитать ввод из stdin (возможно, с gets) и записать вывод в stdoutputs; это назначение по умолчанию).

Вот очень простой построчный фильтр 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, но для этого варианта использования это не нужно.)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...