linux 远程调用脚本执行后不继续执行后续命令,需要输入ctrl+c,详细见补充

作者&投稿:费德 (若有异议请与网页底部的电邮联系)
shell本地脚本调用远程脚本,当远程脚本执行完再继续执行本地脚本~

#!/bin/bash#调用expect脚本执行远程shexpect -c 'set timeout 10000spawn ssh usr@ipexpect { "yes/no" {send "yes"; exp_continue} "*assword" {send "passwd"} }expect "#"send "sh 1"expect "#"'echols -l其中timeout时间需要设置足够长,不然会连接超时断掉。
或者你配置了rsh,可以把上面的expect过程替换成rsh [Host] [-l UserName] [-n] [Command]

linux中有trap命令可以拦截到ctrl+c信号并忽略它: 使用命令kill -l可以列出系统的信号名称,通常我们需要忽略的信号有四个

两个问题.
1. 确定你A机器当前用户的密钥文件在B机器的~/.ssh/id_dsa.pub里面.
参考: http://renyongjie668.blog.163.com/blog/static/160053120101210221908/
2. 修改你的脚本如下.
ssh root@192.168.0.2 "cd /;sh b.sh" >/dev/null 2>&1
echo “finish"

还有问题的话.可以找我.我们慢慢排除.

a.sh中执行(ssh root@192.168.0.2 "cd /;sh b.sh")这个时候就等于重新调用一个连接登录的子shell,所以无法执行下去

要想顺序执行下去,可以使用expect命令

具体参考:
http://zhidao.baidu.com/question/322012019.html

b.sh修改,将输出重定向
nohup sh c.sh >/dev/null 2>&1 &

这脚本写的,为什么不直接在B机器上直接执行。a机器做了免密钥登录了吗,a.sh里的ssh……