为Mac打造一个顺手的链接Linux工具

背景

Mac的话也买了有一段时间,2017款的,作为一个Android程序员,虽然买苹果的本子会让人觉得有种投敌的感觉,但是不得不说,真的实在是太好用了。
作为一个Android程序员,怎么能离开Linux呢?无论是NDK还是.so库的编译,再到ffmpeg,都需要用到Linux。
因为朋友的关系,我对Linux还算比较熟悉,能够使用基本的命令,cd ,ls -al,htop这些命令就不说了,makefile也写过部分,脚本也写过一部分,不过应用场景较少罢了。
那么问题就来了,与Linux同源的Mac OS会不会对Linux开发有着更好的支持。

环境

  • Linux服务器:Ubuntu 16.04
  • 服务器:用的机器是一台老联想,8G内存,i5cpu,256 SSD
  • 域名:www.shouwangzhe.space (大佬不要攻击我,现在已经更换了)
  • MacBookPro: Mac OS
  • 工具:Shuttle
    mark
    解释一下为什么不用阿里云:之所以没有选择阿里云服务器,主要因为是觉得没必要,1Mb的速度,1G内存,1核cpu,一个月100多,何必呢?

效果

效果基本是很傻瓜的一种方式,顶部的图标点击后,选择哪个操作,选择登陆远程服务器:
mark
然后就会蹦出控制台的窗口:
mark
然后我们就能愉快的ls了。
或许你觉得这个有什么意思,用命令不还是能解决吗,打开控制台,输入:

ssh -p 22 xxx@www.域名.com
#输入密码

不一样能进去吗?
如果遇到复杂问题,例如你想把自己的hexo博客推送到githup.io上去呢。

#首先要
xxx@Lenovo-IdeaPad-Y480:~$ cd /hexo
#然后1
xxx@Lenovo-IdeaPad-Y480:~/hexo$ hexo g
#然后2
xxx@Lenovo-IdeaPad-Y480:~/hexo$ hexo d
#然后3 输入你git的本地密码
Enter passphrase for key '/home/star/.ssh/id_rsa': xxxxxx
#推送成功

所以我觉得自动化还是挺重要的,点击一下,一步到位。

实现

实现的方式也是,会的不难,难的不会,基本是由两部分组成,Linux的expact命令,以及Shuttle。

Shuttle

Shuttle 是一款图形界面化的cmd命令工具。
下载完后点击图标,就可以在顶部的导航栏找到他了,至于怎么用,点击这个按钮:
mark
会打开一个文档,json格式的,也就是软件的配置文件(缩进好像有点问题):

{
    "_comments": [],
    "editor": "default",
    "launch_at_login": false,
    "terminal": "Terminal.app",
    "iTerm_version": "nightly",
    "default_theme": "Ocean",
    "open_in": "new",
    "show_ssh_config_hosts": false,
    "ssh_config_ignore_hosts": [],
    "ssh_config_ignore_keywords": [],
    "hosts": [
        {
            "linux Servers": [
                {
                    "QHY’s linux Servers": [
                        {
                            "cmd": ".//linux自动脚本/login.sh",
                            "inTerminal": "tab",
                            "name": "login",
                            "theme": "Ocean",
                            "title": "ShouWangZhe"
                        }
                    ]
                },
                {
                    "博客运维脚本": [
                        {
                            "cmd": ".//linux自动脚本/starHexoBlog.sh",
                            "inTerminal": "tab",
                            "name": "长时启动博客服务器",
                            "theme": "Ocean",
                            "title": "ShouWangZhe"
                        },
                        {
                            "cmd": ".//linux自动脚本/starHexoBlog-RealTime.sh",
                            "inTerminal": "tab",
                            "name": "实时启动博客服务器",
                            "theme": "Ocean",
                            "title": "ShouWangZhe"
                        },
                        {
                            "cmd": ".//linux自动脚本/endHexoBlog.sh",
                            "inTerminal": "tab",
                            "name": "关闭博客服务器",
                            "theme": "Ocean",
                            "title": "ShouWangZhe"
                        }
                    ]
                }
            ]
        },
        {
            "Android adb Servers": [
                {
                    "QHY’s Home adb Servers": [
                        {
                            "cmd": "adb connect 192.168.10.211:5555\r exit\r",
                            "inTerminal": "tab",
                            "name": "connect home onplus 2 test",
                            "theme": "Homebrew",
                            "title": "ShouWangZhe 1+"
                        },
                        {
                            "cmd": "adb disconnect 192.168.10.211:5555\r exit\r",
                            "inTerminal": "tab",
                            "name": "disconnect home onplus 2",
                            "theme": "Homebrew",
                            "title": "ShouWangZhe 1+"
                        }
                    ]
                }
            ]
        }
    ]
}

上面的是我的配置,解析一下这个json:
{mark
也就是对应我的效果那节的那个图,配置文件中的host节点是我们要用到的节点,有点编程基础的也知道这个节点是一个JsonArray。
下面可以加很多节点,每一个节点都是一级菜单,大体目录就这么多,每个节点的配置如下:

{
  "cmd": ".//linux自动脚本/login.sh",
  "inTerminal": "tab",
  "name": "login",
  "theme": "Ocean",
  "title": "ShouWangZhe"
}
  • cmd:你要在打开的控制台里面输入什么命令。
  • name:标题。
  • theme:Mac控制台主题,我选的是Ocean。
  • title:Mac控制台标题。

我是一个android工程师,所以偶尔也需要wifi ADB操作,同样可以写在配置里面:

{
  "cmd": "adb connect 192.168.10.211:5555\r exit\r",
  "inTerminal": "tab",
  "name": "connect home onplus 2 test",
  "theme": "Homebrew",
  "title": "ShouWangZhe 1+"
}

效果就是这样的:
mark
以上大体就是Shuttle的应用,它就是读取cmd节点的命令,然后执行。

expact

很明显,上面的命令我输入了执行脚本的命令。

.//linux自动脚本/login.sh

我在Mac目录下面建立了“linux自动脚本”这个文件夹,专门用来存放我的脚本。
mark
例如想要登陆远程服务器的脚本(login.sh)内容如下:

#!/usr/bin/expect -f
set psw 123456

spawn ssh  -p 22 root@www.shouwangzhe.space
expect {
        "(yes/no)" {send "yes\r"; exp_continue}
        "password:" {send "$psw\r"}
}

expect eof

interact

语法是expect,自动化运维脚本,他的原理是在当前控制台开设一个新的控制台,然后监测命令行是否有你需要的命令,有的话就send一行命令+‘\r’,执行。

用expact还可以完成很多复杂的操作,例如推送博客到GitHub上去:

#!/usr/bin/expect -f
set gitPsw 123456
set userPsw 123456

spawn ssh root@localhost
expect {
        "(yes/no)" {send "yes\r"; exp_continue}
        "password:" {send "$userPsw\r"}
}
expect "root@*"  {send "cd /home/root/hexo\r"}
expect "root@*"  {send "hexo g\r"}
expect "root@*"  {send "hexo d\r"}
expect "*passphrase*"  {send "$gitPsw\r"}

expect eof

exit 0

效果就不展示了,就是省去了上传博客的过程,一步到位,有了这个技巧,就可以做很多方便的功能,也算是做到了优雅的开发了。

最后

弄这套花了我一天的时间,摸索起来还是很费劲的,好在效果很好。
最后,京紫镇楼。
mark

请我喝杯咖啡吧~

支付宝
微信