首页 > 解决方案 > 如何在 UNIX 中将多个命令分配给一个 spawn?

问题描述

如何在 1 次生成中执行所有这些命令?

这些是命令:

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

生成后,我使用期望作为密码......

我知道我可以将它们分配给 1 个变量,例如:

set commands "sudo du -ckhx /opt/ | sort -rh | head -10 && sudo du -ckhx /usr/ | sort -rh | head -10 &&..."

但是如果我有很多这些命令(对于我想要的其他一些目录),它会很长。

谢谢!

标签: expect

解决方案


也许:

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]

如果您要开发期望代码,我建议您熟悉

要添加命令,请使用 Tcl list 命令。

  • 附加:lappend cmds {echo "this is the last command"}
  • 前置:set cmds [linsert $cmds 0 {echo "first command"}]

推荐阅读