"expect"를 사용하여 파일 내용을 변수로 읽는 방법은 무엇입니까?

"expect"를 사용하여 파일 내용을 변수로 읽는 방법은 무엇입니까?

기대 스크립트를 작성하는 데 문제가 있습니다. 다음 bash 명령과 동일한 작업을 수행하고 싶습니다.

iplist=$(cat iplist.txt)

set제가 아는 모든 방법을 다 사용해봤지만 여전히 효과가 없습니다. 다른 방법이 있습니까? 아니면 올바른 방법으로 사용하지 않는 것입니까?

set iplist=$(cat iplist.txt)

답변1

귀하의 답변에 감사드립니다. 방금 다른 게시물에서 해결책을 찾았습니다. set함수에 누락된 유일한 것은 "exec"였으며 결과적으로 다음 줄이 표시되었습니다.

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

예상했던 파일은 문제 없이 원활하게 진행되었습니다!

답변2

TCL은 할 수 있다read(n)파일에 직접 저장하는 것이 특정 명령을 분기하는 것보다 더 효율적이고 이식성이 뛰어납니다.

#!/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

이는 또한 (필요한 경우) 다양한 허용을 허용합니다.open(n)또는chan configure인코딩 설정과 같이 지정할 옵션은 다음과 같습니다.

#!/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

다음과 같이 저장 readfile하고 입력으로 제공하는 경우 somefile:

% 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
ティックル
% 

관련 정보