echo Impossible|sed 's/Im/To be /'

August 31, 2012

COSCUP2012: How to write a bash script like the python?

如何撰寫 bash script 讓它擁有 python 語法上的特性?


增加一個習慣讓 bash script 如同 python 一樣,本身既是單一程式也是其它人的模組 module,方便其它人再引用 reuse 以及作單元測試 unit testing。

借由一個 import.sh 的實作,讓 bash script 擁有 python 以下幾個重要的語法特性

  • import (import module)
  • from (import function from module)
  • del (del module)
  • help (docstring)

黃宇新 ( lloyd huang ) 1998 年進入 Coventive ,目前在 IA 部門從事 embedded Linux 的工作,是個好吃鬼,喜愛義式咖啡,最大的榮耀是曾經擁有一台無敵的 TP240,以及一群 KaLUG 的好朋友。


緊張刺激驚險萬分

在 COSCUP 上台前的一個多小時,laptop 突然無法正常投影,1xx 天沒重開機遇到 check and repair filesystem, 之後的是 X window 起不來,搞的驚險緊張萬分。謝謝 timchen119 使徒提姆@Python 及 Roxane 奔走幫忙, 小菲 的加油打氣。

特別感謝 qerter 的火力支援,出借 laptop 確定簡報可以投影,整個過程緊張到慌了手腳,不知道在作什麼,連思考下一步都有問題。在確定有備案的情況後,焦慮的心安定下來,在台上兩位講者接力下的一小時空擋內,順利修好機器後上台。

上台後,畢竟還是受了影響,幾個埋好的梗忘了抖,Live Demo 結尾亂了手順,可惜漏了二項沒亮。事後回顧 IRC log 上的討論,會眾反應看來不惡,感謝捧場,希望還有機會可以回收在講一回。:-)

本次的 簡報 , 範例import.sh.gz 在此請自行取用,謝謝。

How to write a bash script like the python? from Lloyd Huang

17:01 <Rxa> Python 三聯法orz
17:01 <txs> Python 很棒呀 (L)
17:01 <sx_> r0 我今天這個題目看起來是講bash, 其實是講 python
17:01 <cxi> [r0] 這是在逼人學派森啊 >.<
17:01 <zxr> python和js甚麼時候關係變得這麼好
17:02 <sxy> 今天好幾場java script跟python都變成好朋友
17:03 <Rxa> 今天真的是Python Loop......
17:08 <cx2> /dev/null
17:08 <exn> 為什麼是 return 2?
17:08 <kx6> [r0]這與法太噁心了
17:08 <dxx> 其實把東西倒到 /dev/null 不會覺得噁心耶 :|
17:08 <sxy> 他都說很難懂了啊
17:09 <lxq> exn: 因為只有執行 return 阿
17:09 <dxx> python 讓我飛上天了~
17:09 <Rxa> [r0]因為python我會飛
17:09 <Rxa> XDDD
17:09 <lxq> 然後 stderr 倒掉而已
17:09 <exn> lxq: 我的意思是 return 1 > /dev/null 這樣應該也行吧?
17:09 <lxq> 不是 return 2
17:10 <lxq> return > /dev/null 應該也型
17:10 <ix7> std err
17:10 <Sxy> 今天 PyCon 內容真豐富(?)
17:10 <lxq> 喔
17:10 <ixo> stdout & stderr
17:10 <lxq> 但是
17:10 <dxx> PyCUP (?
17:10 <exn> lxq: hmm 害我想半天為啥要寫 2 XDDD
17:10 <lx2> return 2> /dev/null 才是對的,因為 return > /dev/null 的話搞不好實際上有執行
17:10 <lxq> 但是你不知道
17:11 <lxq> 不是只是要顯示而已,把 function 裡面都改成 rm 你就懂了
17:11 <Kxo> 今年python大舉入侵XD
17:11 <Sxy> Python 101
17:11 <lxq> 今年是 Python 年!
17:11 <lxq> 明天歡迎到 Python Taiwan 攤位聊聊 :)
17:11 <sxc> 今年Python 好多
17:14 <Jxn> [r0] help最不好做!!
17:14 <yxc> pydoc rules
17:15 <axm> 擁有了import的力量 感覺好威
17:15 <dxx> cool!
17:16 <sx_> [r0] 通常用忘記更多來學習更多
17:16 <kxs> lloydhuang 把 import.sh 講得我都想學 python 了 XD
17:17 <dx_> 為什麼你會飛
17:17 <cxp> ←討厭寫 shell script 的 zsh user orz
17:18 <dxx> zsh 覺得太複雜了...
17:20 <jxh> 天瓏攤位還在嗎?等下去搬書
17:21 <sxy> 搬python嗎
17:21 <axm> 這次好多Live DEMO
17:24 <kxs> [r0] 連三場 live demo & py
17:28 <exn> [R0] QA
17:28 <sx_> import gf
17:28 <bxy> #import all...
17:29 <dxx> from python import * (誤
17:29 <Jxn> [r0] end