我在编写期望脚本时遇到困难。我想做一些相当于以下 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
ティックル
%