web-dev-qa-db-ja.com

「expect」を使用してファイルの内容を変数に読み込むにはどうすればよいですか?

Expectスクリプトの記述に問題があります。次のbash命令と同等のことをしたいのですが。

iplist=$(cat iplist.txt)

私が知っているすべての方法でsetを使用しようとしましたが、それでも機能しません。別の方法はありますか、それとも正しい方法で使用していないのですか?

set iplist=$(cat iplist.txt)

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

あなたの答えをありがとう、私は別の投稿で解決策を見つけました、関数setで唯一欠けているのは "exec"だけで、次の行が得られました:

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

そして、expectファイルは問題なく順調に進んでいます!