问题描述
如何在 1 个 spawn 中执行所有这些命令?
这些是命令:
sudo du -ckhx /opt/ | sort -rh | head -10
sudo du -ckhx /usr/ | sort -rh | head -10
sudo du -ckhx /var/ | sort -rh | head -10
这是生成命令:
spawn ssh -o StrictHostKeyChecking=no $username@$ip $commands
生成后,我使用expect 作为密码...
我知道我可以将它们分配给 1 个变量,例如:
set commands "sudo du -ckhx /opt/ | sort -rh | head -10 && sudo du -ckhx /usr/ | sort -rh | head -10 &&..."
但是如果我有很多这样的命令(对于我想要的其他一些目录),它会很长。
谢谢!
解决方法
也许:
set commands {
sudo du -ckhx /opt/ | sort -rh | head -10
sudo du -ckhx /usr/ | sort -rh | head -10
sudo du -ckhx /var/ | sort -rh | head -10
}
spawn ssh -o StrictHostKeyChecking=no $username@$ip sh -c $commands
基于 Nate 的评论:
set dirs { /opt /usr /var }
set cmds [lmap dir $dirs {
format {sudo du -ckhx %s | sort -rh | head -10} $dir
}]
spawn ssh ... sh -c [join $cmds \n]
如果您要开发 expect 代码,我建议您先熟悉一下 tcl 语法。
要添加命令,请使用 Tcl list 命令。
- 附加:
lappend cmds {echo "this is the last command"}
- 前置:
set cmds [linsert $cmds 0 {echo "first command"}]