如何使用“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
ティックル
% 

相关内容