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
ティックル
%
_
あなたの答えをありがとう、私は別の投稿で解決策を見つけました、関数set
で唯一欠けているのは "exec"だけで、次の行が得られました:
set iplist [exec cat /root/iplist.txt]
そして、expectファイルは問題なく順調に進んでいます!