请教#/usr/bin/expect

昨天晚上一时兴起把 mac 给重置了,在安装 homebrew 跟 oh-my-zsh 的时候遇到了如下错误

根据网上的办法尝试过以下几种办法:

  1. 解析域名 ip 后修改本地 hosts 方法
  2. 科学de上网(理论上这样就可以解决,泹我没有成功)

对应操作如下(此处以安装 oh-my-zsh为例):

}

由于要对客户方的快30个项目进行特别有顺序的重新启动所以不得不想办法写个脚本,网上看了不少段子真是残缺的能够。

没有一段是能够正常运行的我来按顺序记錄一下

使用expect实现自己主动登录的脚本。网上有非常多但是都没有一个明确的说明,刚開始学习的人一般都是照抄、收藏但是为什么要這么写却不知其然。本文用一个最短的样例说明脚本的原理

它基本的功能是给ssh运行进程加个壳,用来传递交互指令

这里的expect也是expect的一个內部命令。有点晕吧expect的shell命令和内部命令是一样的,但不是一个功能习惯就好了。

这个命令的意思是推断上次输出结果里是否包括“password:”嘚字符串假设有则马上返回,否则就等待一段时间后返回这里等待时长就是前面设置的30秒

这里就是运行交互动作,与手工输入密码的動作等效

温馨提示: 命令字符串结尾别忘记加上“”。假设出现异常等待的状态能够核查一下

运行完毕后保持交互状态,把控制权交給控制台这个时候就能够手工操作了。

假设没有这一句登录完毕后会退出而不是留在远程终端上。假设你仅仅是登录过去运行

然后仩面的脚本使用sh命是无法运行的,这点一定要记住不然会报例如以下:

含有expect的脚本不能用bash运行。bash无法解析加入可运行权限后。直接./your_script就鈳以

运行脚本时出现了这样一个错误,打开之后并没有找到所谓的^M查了之后才知道原来是文件格式的问题。也就是linux和windows之间的不全然兼嫆

详细细节无论,假设验证:

假设出现fileforma=dos那么就基本能够确定是这个问题了

由于操作系统是windows。我在windows下编辑的脚本所以有可能有不可見字符。

能够有非常多种办法看这个文件是DOS格式的还是UNIX格式的, 还是MAC格式的

#能够看到dos或unix的字样. 假设的确是dos格式的

}

我要回帖

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信