参考
- CSDN:Shell脚本交互之:自动输入密码
- 简书:mac下解决开机需要每次ssh-add的问题
- 博客园:expect简介和使用例子
背景
由于每次开机一些配置需要重新设置,所以设置一个自动执行的脚本就很美滋滋
脚本需要用 shell 来编写 如果需要进行输入密码才能下一步,则须使用 expect 达到目的
步骤
1. 新建一个 onload.sh 文件,名称自定义
2 更改权限为可执行
# 后面的路径是脚本文件所在路径,也可直接把文件拖进终端中查看
chmod a+x /Users/****/Dawn/System/onload.sh
3. 写好后打开系统偏好设置 -> 用户与群组 -> 登陆项 -> 点击加号把脚本添加进来
上面两步其实有更好的方法,详见文首第二条参考文档
4. done!开机重启验证一下,成功执行~
终端可能会提示是否允许执行,点击允许并且勾选不再提示就好了~
5. 如果过程中需要输入密码才能继续执行,则需要安装 expect 进行交互
brew install expect
6. 此时需要更新我们的脚本
#!/usr/bin/expect
# 首行要指定使用 expect
# 设置超时时间 30s
set timeout 30
# 之前的命令都要使用 spawn 来执行
# 这里有个小坑,文件路径不要使用 ~/ 的形式,有时会提示找不到文件,建议使用 /Users/****/ 的方式
spawn ssh-add /Users/****/.ssh/id_rsa
# 如果打印的提示信息中包含 passphrase 字段
expect "passphrase"
# 则发送下面的内容
send "1234567\r"
# 等待 spawn 进程结束后退出信号 eof
expect eof
执行一下
看看最初的操作,需要手动输入密码
使用了 expect 之后,提示信息中含有我们在代码里设置的 passphrase 字段,就自动帮我们输入密码,是不是方便了许多😜