bash script.sh params4script
python script.py params4script
bash -c ""
bash -c ''
python -c ''
python -c ""
- 一行和多行只是写法不同
- 打包成函数和文件没有本质区别
- 注意Shell会解释输入,转译字符、变量生效
- 推荐服用本地代码,完全本地执行代码,完全远程执行代码(在本地准备好函数和变量),最大程度复用代码
- 嵌套多层ssh
- 执行、日志分离
ssh ${user}@${host} 'cmd;cmd;'
ssh ${user}@${host} "cmd;cmd;"
ssh ${user}@${host} '
cmd
cmd
'
ssh ${user}@${host} "
cmd
cmd
"
var1=foo
var2=bar
function getHostName() {
echo $(hostname)
echo ${var1}
echo ${var2}
}
getHostName
ssh ${user}@${host} "
#经Shell解释输入,执行内容获得本地变量值
var1=${var1}
var2=${var2}
#获取函数定义,执行函数定义
$(typeset -f getHostName)
#远程执行函数,复用本地函数代码
getHostName
"
ssh ${user}@${host} '
var1='${var1}'
var2='${var2}'
function getHostName() {
echo $(hostname)
echo ${var1}
echo ${var2}
}
getHostName
$(typeset -f getHostName)
getHostName
ssh ${user}@${host} bash -s < script.sh hello world
ssh ${user}@${host} bash -s hello world < script.sh
ssh ${user}@${host} bash -s hello < script.sh world
:script.sh
echo $(hostname)
echo $1
echo $2
script.sh
host4 > host3 > host2 > host1(execute cmd)
function fromhost1 () { ... }
function fromhost2 () { ssh u1@host1 "x=${x}; y=${y}; z=${z}; $(declare -f);fromhost1;" }
function fromhost3 () { ssh u2@host2 "x=${x}; y=${y}; z=${z}; $(declare -f);fromhost2;" }
function fromhost4 () { ssh u3@host3 "x=${x}; y=${y}; z=${z}; $(declare -f);fromhost3;" }
fromhost4
function fromhost1 () { timeout 2s ls -al /data > tmplog;cat tmplog; } && function fromhost2 { timeout 10s ssh cib@16.207.1.9 "$(declare -f);fromhost1;"; } && function fromhost3 { timeout 10s ssh cib@16.7.32.29 "$(declare -f);fromhost2;"; }
参考:linux SSH 嵌套远程执行命令
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?