Como eu uso 'esperar' para ler o conteúdo de um arquivo em uma variável?

1

Estou tendo problemas para escrever um script esperado. Eu quero fazer algo equivalente à seguinte instrução bash:

iplist=$(cat iplist.txt)

Eu tentei usar set de todas as maneiras que conheço, mas ainda não está funcionando. Existe outra maneira ou é apenas que eu não estou usando da maneira certa?

set iplist=$(cat iplist.txt)
    
por Alejandro Enrique Garcia Navar 21.09.2018 / 17:09

2 respostas

2

O TCL pode read(n) um arquivo diretamente; isso é mais eficiente e mais portátil do que o envio a algum comando.

#!/usr/bin/env expect

proc slurp {file} {
    set fh [open $file r]
    set ret [read $fh]
    close $fh
    return $ret
}

set iplist [slurp iplist.txt]

puts -nonewline $iplist

Isso também (se necessário) permite vários open(n) ou chan configure opções a serem especificadas, por exemplo, para definir a codificação:

#!/usr/bin/env expect

package require Tcl 8.5

proc slurp {file {enc utf-8}} {
    set fh [open $file r]
    chan configure $fh -encoding $enc
    set ret [read $fh]
    close $fh
    return $ret
}

set data [slurp [lindex $argv 0] shiftjis]

chan configure stdout -encoding utf-8
puts $data

Que se salvo como readfile e dado somefile como entrada:

% file somefile
somefile: DBase 3 data file with memo(s) (1317233283 records)
% xxd somefile
00000000: 8365 8342 8362 834e 838b                 .e.B.b.N..
% ./readfile somefile
ティックル
% 
    
por 21.09.2018 / 19:31
0

Obrigado por suas respostas, Acabei de encontrar a solução em outro post, na função set , a única falta foi "exec", resultando na linha:

set iplist [exec cat /root/iplist.txt]

E o arquivo esperado está indo bem, sem problemas!

    
por 21.09.2018 / 17:52