![如何使用“expect”将文件内容读入变量?](https://linux22.com/image/11191/%E5%A6%82%E4%BD%95%E4%BD%BF%E7%94%A8%E2%80%9Cexpect%E2%80%9D%E5%B0%86%E6%96%87%E4%BB%B6%E5%86%85%E5%AE%B9%E8%AF%BB%E5%85%A5%E5%8F%98%E9%87%8F%EF%BC%9F.png)
我在编写期望脚本时遇到困难。我想做一些相当于以下 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
ティックル
%