如何使用“expect”将文件内容读入变量?

Ale*_*var 8 linux shell-script expect

我在编写期望脚本时遇到困难。我想做一些相当于以下 bash 指令的事情:

iplist=$(cat iplist.txt)
Run Code Online (Sandbox Code Playgroud)

我已经尝试过使用set我所知道的所有方法,但仍然不起作用。还有其他方法还是只是我没有以正确的方式使用它?

set iplist=$(cat iplist.txt)
Run Code Online (Sandbox Code Playgroud)

Ale*_*var 7

感谢您的回答,我刚刚在另一篇文章中找到了解决方案,在该函数中set唯一缺少的是“exec”,导致该行:

set iplist [exec cat /root/iplist.txt]
Run Code Online (Sandbox Code Playgroud)

预期文件进展顺利,没有任何问题!


thr*_*rig 4

TCL可以read(n)直接生成文件;这比分叉给某些命令更有效且更便携。

\n\n
#!/usr/bin/env expect\n\nproc slurp {file} {\n    set fh [open $file r]\n    set ret [read $fh]\n    close $fh\n    return $ret\n}\n\nset iplist [slurp iplist.txt]\n\nputs -nonewline $iplist\n
Run Code Online (Sandbox Code Playgroud)\n\n

这也(如果需要)允许指定各种open(n)或选项,例如设置编码:chan configure

\n\n
#!/usr/bin/env expect\n\npackage require Tcl 8.5\n\nproc slurp {file {enc utf-8}} {\n    set fh [open $file r]\n    chan configure $fh -encoding $enc\n    set ret [read $fh]\n    close $fh\n    return $ret\n}\n\nset data [slurp [lindex $argv 0] shiftjis]\n\nchan configure stdout -encoding utf-8\nputs $data\n
Run Code Online (Sandbox Code Playgroud)\n\n

如果保存为并作为输入readfile给出:somefile

\n\n
% file somefile\nsomefile: DBase 3 data file with memo(s) (1317233283 records)\n% xxd somefile\n00000000: 8365 8342 8362 834e 838b                 .e.B.b.N..\n% ./readfile somefile\n\xe3\x83\x86\xe3\x82\xa3\xe3\x83\x83\xe3\x82\xaf\xe3\x83\xab\n% \n
Run Code Online (Sandbox Code Playgroud)\n