SlideShare a Scribd company logo
シェルスクリプトで
QOLを上げたい
W8LT#3
Salab@fat_daruuuuma
シェルスクリプト
• Bashとかシェルで動くやつ
• 許可とコマンドさえあればシステム設定にも触れる
• 一発で色々できる
• 書き方に個人差が超出る
• 最高
• 強い
• かっこいい
• 天才
こんなことありませんか?
第1弾
Macで
外部キーボードを使いたい
Mac with 外部KB
• ツラい現実
• 外部KBがあると邪魔
• Macに乗せると内部KBが反応しちゃう
• MagicTrackPadとかあればなんとか
• 良い現実
• 内部KBを有効/無効化できるコマンドがある
• つまりシェルスクリプトでなんとかなる
function ctrl_internal_keyboard() {
sudo $1 /System/Library/Extensions/AppleUSBTopCase.kext/
Contents/PlugIns/AppleUSBTCKeyboard.kext
case $? in
3) exit 0;;
*) exit $?;;
esac
}
!
alias awake_int_kb= ctrl_internal_keyboard "kextload"'
alias sleep_int_kb= ctrl_internal_keyboard "kextunload"'
コマンド
外部キーボードを
繋いだら叩けばいい
!
・・・めんどい?
Control Plane
with
シェルスクリプト
Control Planeとは
• Mac OS Ⅹアプリ(Ciscoのアレじゃないよ)
• http://www.controlplaneapp.com/about/
• Context based configurationを可能に
• あるContextのとき,ある優先度で,何かを実行
• Network環境やらusb attach/detach等をとれる
• シェルスクリプトも実行可能
手順(簡素)
• 外部KBを繋ぐ
• Contextに名前をつけて新規作成(ext KBとする)
• Add attached USB Device Ruleで外部KBを選択
• Run ShellScript Actionをext KBに結びつける
• arrival時に内部KBを寝かせ,departure時に内部KB
を起こすScriptを設定する
• /sbin/kextload, /sbin/kextunloadはNO PASSWD
でsudoできるよう変更
最高
外部キーボード使わないけど
こんなことありませんか?
第2弾
いちいちシェルにProxy設定めんどい
東工大のtitech-pubnetつらい
わかる∼∼∼∼∼∼
要件
• 本体のネットワーク設定(Proxy含む)
• SSIDを取得
• シェルのProxy設定
• Proxyの認証
• IPが割り当てられないと不可
• 稀にWifiをon/offしないと繋がらないのでそれ
使うもの
• 本体のネットワーク設定(Proxy含む)
• scselect && Network環境プロファイル
• SSIDを取得
• /System/Library/PrivateFrameworks/Apple80211.framework/
Versions/Current/Resources/airport -I ¦ grep ' SSID' ¦ awk '{print $2}
• シェルのProxy設定
• SSID drivenで規定のproxyをexport
• Proxyの認証(IPが割り当てられないと不可)
• ifconfigからIPの割り当てを見て,curlで認証
• 稀にWifiをon/offしないと繋がらないのでそれ
• networksetup -setairportpower en0 $(on/off)
はい
https://github.com/jmatsu/auto-export-proxy
※今度れどめ更新します
こんなことありませんか?
第3弾
T/Aやってると
学部生が優秀すぎて困る
( ^ν^)「report.txt」
( ^ν^)「採点するぞ∼」
はい,0点
!
とできないつらさ
hoge.pdf => report.txt
正直嫌がらせの天才だと思う
今までの提出例
• report.txtという名前を被った
• pdf, doc, xls, docx, xlsx, rtf, tex
• Mac端末から提出するのに
• Shift-JIS, EUC-JP, BINARY
• お前に何があった
• executable permission, tsurai.txt
• 帰れ
• repouto-dayo.txt, 0byteのreport.txt
ある程度は
シェルスクリプトで
一発置換しましょう
方針
• 基本
• エンコードの判定
• MIME typeの検出
• 名前変更 or 変換
• エンコードを変更
• 例外
• docxとxlsxはMIMEがzip
• 解凍したときの情報から判断
使うもの(の例)
• MIME typeの検出
• file -I $1 ¦ awk {print $2}
• 特定拡張子ファイル探索
• find -E $dir -type f -iregex $regex とか
• rtfからtxtへのconvert
• textutil -convert txt $rtf_file
• エンコ判定と変更にnkf
• その他 正規表現マッチやらcpやらunzip -Zやら
プロトタイプ
https://gist.github.com/jmatsu/
26a9a997d4d5af7c5e97
優秀な学部生がいると
T/Aも頑張らないとツラいですね
優秀な学部生へ
僕から伝えたいことは下記urlで
https://www.google.co.jp/search?q=linus+fuck&espv=2&biw=988&bih=673&tbm=isch&source=lnms&sa=X&ei=r1WKVaO-FoTsmAXX6YCQDw&ved=0CAcQ_AUoAg
• ちなみに
• Mac OS Ⅹ 10.9.5
• zsh 5.0.7 (x86_64-apple-darwin13.4.0)
• で動作を確認しています

More Related Content

More from Junpei Matsuda

れれれのGitおぢさん - git rerere #w8lt
れれれのGitおぢさん - git rerere #w8ltれれれのGitおぢさん - git rerere #w8lt
れれれのGitおぢさん - git rerere #w8lt
Junpei Matsuda
 
Spring + Gradle + Kotlin W8LT#5
Spring + Gradle + Kotlin W8LT#5Spring + Gradle + Kotlin W8LT#5
Spring + Gradle + Kotlin W8LT#5
Junpei Matsuda
 
Try to Write A Better Commit Message
Try to Write A Better Commit MessageTry to Write A Better Commit Message
Try to Write A Better Commit Message
Junpei Matsuda
 
Bashで競技プログラミング #w8lt #w8lt4
Bashで競技プログラミング #w8lt #w8lt4Bashで競技プログラミング #w8lt #w8lt4
Bashで競技プログラミング #w8lt #w8lt4
Junpei Matsuda
 
Kotlinで快適Android開発 #W8lt
Kotlinで快適Android開発 #W8ltKotlinで快適Android開発 #W8lt
Kotlinで快適Android開発 #W8lt
Junpei Matsuda
 
Application Developer Festival 2015 LT
Application Developer Festival 2015 LTApplication Developer Festival 2015 LT
Application Developer Festival 2015 LT
Junpei Matsuda
 
PRML2.3.8~2.5 Slides in charge
PRML2.3.8~2.5 Slides in chargePRML2.3.8~2.5 Slides in charge
PRML2.3.8~2.5 Slides in charge
Junpei Matsuda
 

More from Junpei Matsuda (7)

れれれのGitおぢさん - git rerere #w8lt
れれれのGitおぢさん - git rerere #w8ltれれれのGitおぢさん - git rerere #w8lt
れれれのGitおぢさん - git rerere #w8lt
 
Spring + Gradle + Kotlin W8LT#5
Spring + Gradle + Kotlin W8LT#5Spring + Gradle + Kotlin W8LT#5
Spring + Gradle + Kotlin W8LT#5
 
Try to Write A Better Commit Message
Try to Write A Better Commit MessageTry to Write A Better Commit Message
Try to Write A Better Commit Message
 
Bashで競技プログラミング #w8lt #w8lt4
Bashで競技プログラミング #w8lt #w8lt4Bashで競技プログラミング #w8lt #w8lt4
Bashで競技プログラミング #w8lt #w8lt4
 
Kotlinで快適Android開発 #W8lt
Kotlinで快適Android開発 #W8ltKotlinで快適Android開発 #W8lt
Kotlinで快適Android開発 #W8lt
 
Application Developer Festival 2015 LT
Application Developer Festival 2015 LTApplication Developer Festival 2015 LT
Application Developer Festival 2015 LT
 
PRML2.3.8~2.5 Slides in charge
PRML2.3.8~2.5 Slides in chargePRML2.3.8~2.5 Slides in charge
PRML2.3.8~2.5 Slides in charge
 

シェルスクリプトでQOLを上げる話