[學習筆記]用shell script加快工作效率(OSX)
先跟大家說聲新年快樂,好久沒有撰寫學習筆記了,趁這過年過節來寫點東西。
16年年底因為論文投稿加上一些工作上的時程壓力,沒什麼時間寫部落格,但這段期間還是玩了不少東西,以後再把筆記加進來。
這次筆記主要是因為工作上對於前端開發,每次總是要花一兩分鐘進行環境的啟動,尤其不是full time工作的我,一直要切換環境進行因應不同需求的開發,尤其是上次survey了dockerfile蒙發了想要無痛進行環境啟動的念頭。
針對這次需求,一開始挑的是使用.sh
進行撰寫,但某些需要另外啟動其他程式的環境就要透過.scpt(applescript)
進行啟動。
此篇是針對osx作業系統噢!
撰寫指令之前先了解一下.sh
鳥哥的linux私房菜-學習 Shell Scripts: http://linux.vbird.org/linux_basic/0340bashshell-scripts.php
bash指令sublime text開發
在完成效率開發環境啟動的第一步是將相關指令建置完成。
使用bash指令開啟資料夾進sublime text進行開發,透過這樣開啟就可以不用將資料夾拖曳來拖曳去,透過指令就可以完成開啟開發編輯器的功能。這邊是參考:
https://gist.github.com/olivierlacan/1195304
將環境路徑設定完畢後,就可以用底下指令快速開啟資料夾以利開發。
$cd /Develop/Folder/Path
$sublime .
針對需要密碼的sudo指令運行
因為將使用者帳號密碼明文寫進.sh
也是挺危險,因此用變數將此重新輸入會是比較安全的做法。
這邊參考:
http://stackoverflow.com/questions/3980668/how-to-get-a-password-from-a-shell-script-without-echoing?answertab=oldest#tab-top
#!/bin/bash
# 讀取密碼
echo -n Password:
read -s password
echo
# 執行步驟
echo $password
此方法就可以再啟動前重新輸入一次,並用變數記住,進而開啟其他指令。
透過applescript另開啟terminal
因為環境開啟可能不只開啟一個terminal就能完成,還有其他工作指令,例如監聽資料夾更動、資料庫啟動等等,因此要透過另開terminal視窗進行指令,於此就要使用applescript來聯繫另外的視窗。
下面的範例是另開視窗:
#!/bin/bash
osascript -e 'tell app "Terminal"
do script "echo hello world"
end tell'
更要人性化的操作這部分,其實可以survey一下mac內建的機器人Automator進行腳本建置。
用shell script串起工作
對於工作需求的前端開發要執行好多個指令,先釐清一下將列點出來
- 執行mongoDB (需要sudo 另開視窗)
- 將專案資料夾用sublime開起來
- 執行專案內的自動化工具gulp (腳本內需要sudo 另開視窗)
- 開啟localhost以利開發
1 mongoDB要另開視窗
2 3 要進入開發資料夾,並啟動gulp-watch進行監聽因此也另開資料夾
4 就是用預設瀏覽器開啟localhost
最後將個工作串起來
以下就是整個.sh
了.sh
放這邊噢,有興趣可以參考
https://github.com/Mike-Zheng/Work-ShellScript
#!/bin/bash
echo "工作腳本"
echo "請輸入密碼"
read -s password
#先把sublime叫起床
osascript -e 'tell application "Sublime Text"
activate
end tell'
#開啟mongo資料庫
osascript -e 'tell app "Terminal"
do script "echo '"$password"' | sudo -S sudo mongod"
end tell'
echo "Start mongodb"
#開啟sublime 並運行gulp
osascript -e 'tell app "Terminal"
do script "cd /Develop/Folder/Path && sublime . && echo '"$password"'|sudo -S gulp "
end tell'
echo "Start sublime && develop"
#等待開發環境運行3秒
sleep 3
#開啟localhost
open http://127.0.0.1:3000 && exit