expect - 如何在 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 &&..."
但是如果我有很多这些命令(对于我想要的其他一些目录),它会很长。
谢谢!
解决方案
也许:
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语法。
要添加命令,请使用 Tcl list 命令。
- 附加:
lappend cmds {echo "this is the last command"}
- 前置:
set cmds [linsert $cmds 0 {echo "first command"}]
推荐阅读
- javascript - React Native Firebase 事务无法正常工作
- google-apps-script - 在将项目复制到新工作表之前,如何检查列表中的重复项?
- pandas - 使用 lambda 以字符串开头时替换 DataFrame 列中的值
- javascript - 使用 eval 动态渲染从后端提供的 JSX
- dataset - 一个大数据集或各种子数据集 Jasper studio
- node.js - 在远程 Windows 服务器上部署 Create-React-App
- app-inventor - 键盘打开时应用程序缩小
- azure - 将数据从 SQL Server 复制到 Azure 数据工厂中的文件时的行拆分问题:
- asp.net-mvc - 如何在 Kendo UI asp.net mvc Pivot 网格中隐藏总和列和行
- r - geom_boxplot,如何根据组专门为异常值着色并保持所有内容为黑色?