目录

  • 前言
  • 效果
  • 工具
  • 具体配置
  • bash脚本


前言

不知你是否碰到如下场景:

  1. 当dev开发完且master有新上线,dev没有master的最新代码QA无法打包,但电脑在公司,人在他方
  2. 只有你有打包权限,但电脑在公司,人在他方
  3. 。。。。。。

若在电脑旁这不是啥问题,但有时电脑在公司,人在路上或在家。就得麻烦同事来帮忙搞,嗯…有些小烦人。 但身为一个码农怎么能屈服于这种小事呢。

效果

  1. 手机给mac发送一个特定格式的邮件
  2. mac收到邮件执行对应脚本
  3. 脚本执行完将日志以邮件的方式反馈给手机
  4. 电脑休眠不影响脚本执行

工具

  1. mac自带的邮件
  2. mac终端自带的mail
  3. mac自带的名为【脚本编辑器】的软件
  4. 想要执行的脚本

具体配置

打开邮件,command+,打开设置,进入选择最后的规则,配置时需要注意如下几点

ios 代码执行sh脚本 苹果手机执行脚本_phone控制mac

  • 执行的脚本只能是appleScript(苹果自家脚本语言),使用mac自带的名为【脚本编辑器】的软件编写就行
  • 只能选择放在~/Library/Application Scripts/com.apple.mail目录下的脚本
  • 不熟悉appleScript脚本的同学可以直接让其去执行制定位置的bash脚本,bash默认目录为~/,可以根据需要cd到指定目录
tell application "Terminal"
   activate
   do script "bash ./mail/merge.sh"
end tell

bash脚本

在次提供自动merge代码的脚本,仅供参考。发送邮件使用的是mac自带的mail。如果没有收到做如下检查

#!/bin/bash
	
	sendEmail(){
	  echo -e $1 | mail -s "merge结果" xxxxx@163.com 
	}
	
	# 指定项目目录
	cd xxxxxx
	
	# 获取当前分支
	logs=$(git symbolic-ref --short -q HEAD);
	
	logs="${logs}开始合master\n"
	
	
	# 暂存未提交的代码
	git add .
	git stash
	logs="${logs}暂存完毕\n"
	
	git fetch
	check_results=$(git merge master)
	
	if [ "$check_results" != "Already up to date." ]
	then
	  logs="${logs}有冲突请手动合并\n"
	  git merge --abort
	  sendEmail
	  exit
	fi
	
	logs="${logs}没有冲突"
	git push
	logs="${logs}合并master完成"
	sendEmail $logs
  • 就通过mail命令查看发送的邮件是否被打回,被打回按照如下方式操作,如果因为SMTPUTF8被拒绝,执行如下两条命令
# 必须得叫sudo,我也不知道为啥,不加就报错
sudo postconf smtputf8_enable=no
sudo postfix reload # postfix是mac自带的邮件服务器,mail命令就是通过其收发邮件