У меня есть эта часть кода TCL/expect:
commands.txt sample content:
configure terminal
interface Vlan10
ip address 192.168.1.1 255.255.255.0
set commands "commands.txt"
#
set f [open "$commands"]
set commands [split [read $f] "\n"]
close $f
#
foreach cmd $commands {
expect {
"*#" {
send "$cmd\n"
}
и он работает так, как задумано: для каждой команды, отправляемой на коммутатор, он «ожидает приглашения Cisco *#, а затем отправляет команды в списке построчно с символом новой строки в конце».
Теперь я хотел бы использовать переменную, ранее установленную в скрипте (например: set ip «192.168.2.2») внутри командного файла, например:
cat commands.txt
configure terminal
Interface Vlan10
ip address $ip 255.255.255.0
Как мне это сделать?
Теперь переменная игнорируется и, очевидно, отправляется как литеральная строка. например:
ip address $ip 255.255.255.0
Спасибо
Используйте команду subst
: https://www.tcl.tk/man/tcl8.6/TclCmd/subst.htm
Он выполняет все обычные строковые интерполяции, такие как $
для замен переменных, []
для замен команд и \
для замен обратной косой черты.
Вы можете ограничить его заменой переменных, только используя правильный аргумент:
send "[subst -nocommand -nobackslashes $cmd]\n"
большое спасибо. Я работал над командой «subst», но не смог подобрать правильный синтаксис для этой части кода.