gpt4 book ai didi

ubuntu - 期望循环从文本文件运行命令

转载 作者:行者123 更新时间:2023-12-04 18:47:35 24 4
gpt4 key购买 nike

我正在尝试编写一个期望循环,它查看文本文件中的主机列表,然后从另一个以主机 IP 和文件 extension.txt 命名的文本文件运行一系列命令

例如,在 hosts.txt 文件中,我将定义以下主机:

192.168.1.1
192.168.3.1
192.168.2.197

ETC..

在另一个目录中,我将拥有如下命名的文件,其中包含我想在每个主机上运行的一组不同的命令:
192.168.1.1.txt 192.168.3.1.txt 192.168.2.197.txt

因此,如果主机 192.168.1.1 存在于 hosts.txt 中,它将针对该主机运行 192.168.1.1.1.txt 中的命令。为了实现这一目标,最简单的工具是什么?

最佳答案

我不是 100% 确定,但部分解决方案是:

# Read-a-file helper procedure
proc readFile {filename} {
set f [open $filename]
set content [read $f]
close $f
return $content
}

foreach host [split [readFile hosts.txt] "\n"] {
if {[catch { set commands [readFile $host.txt] }]} continue
spawn ssh $host
# ... handle connecting ...
# get a prompt ...
expect -ex "$ "
foreach line [split $commands "\n"] {
send $line\r
# Get the prompt
expect -ex "$ "
}
send "exit\r"
expect eof
close
}

这将为您提供主机和针对该主机运行的命令,跳过不存在的文件,然后将每个文件的每一行发送到各自的主机,并排除连接的设置和拆除。我已经跳过了诸如如何处理密码之类的事情,而且还有很多我不是 100% 确定的(我不是普通的 Expect 用户,所以 expect eof/ close 可能是错误的)。它应该看起来很相似。

您可能会考虑将命令文件设置为(部分)期望脚本,您只是 source .在这段代码中会更简单一些(代价是要求这些文件更复杂一些)。

关于ubuntu - 期望循环从文本文件运行命令,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24162283/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com