de[v|b]log

ShellScript, Coffee, iOS/OSX Dev
Origin: Himajinworks.
About.

今日は個人で作成してGithubで公開していたzgit-repo-user-config (https://github.com/kmhjs/zgit-repo-user-config)というzshプラグインをnative-zshスクリプトに移行する作業をしていた。

zgit-repo-user-config is 何

  • git config --local user.*を指定してないプロジェクトに対して、それを自動的に設定してくれるzshプラグイン。
  • Repository : zgit-repo-user-config

作業事項

1
2
3
4
5
6
7
8
13bedf8 Merge branch 'develop'
789980f Merge branch 'feature/switch_to_native_zsh' into develop
fb33b04 [MOD] Switched to native-zsh script
cf02203 [MOD] Split all complex parts into function
bd86412 [MOD] Split validator, and integrated
2291401 [MOD] Split function related to configuration adding task
e2c0767 [MOD] Change function name
6b746bf [MOD] Changed option parsing from manual to getopts (zsh-builtin)

上記では関数の切り出し等も行った。(関数内部の関数名をlocal::function_name::local_function_nameとした)

実はここ2日で得たもので特にあと悩む点はなかった。言うことがあるとすれば以下である。

cutの置き換え

native-zshスクリプトに移行するのであればcutも使っていけない。 ということで今日は${(s:delim:)var}を多用した。

これも先日のgrepの話と同じで一行一行に対して適用しなければいけないため、このようになる。 以下はカンマ区切りのデータの2要素目を取り出す例である。

cutを使う場合

1
2
3
local input_file="filename"

cat ${input_file} | cut -d, -f2

zshの場合

1
2
3
4
5
6
7
8
local lines line arr
local input_file="filename"

lines=(${(@f)"$(cat ${input_file})"})
for line in ${lines}; do
    arr=(${(s:,:)line})
    echo ${arr[2]}
; done

若干長くなる。これもcutのような挙動をするコマンドを作成すべきな気がする。 また上記で,をデリミタとして指定しているが、(s:${dellim}:)のように外部からデリミタを与えて作業させるというのがうまくできなかったためここは調べないといけなさそうである。

備考

  • はじめてpreview用にgifイメージをREADMEに追加した。
  • コマンドのwrapper作成としてzfc(zsh-filter-collection)のリポジトリを作成した。

TODO

  • cutのwrapper作成
  • wrapperとオリジナルのコマンドの性能比較
  • zgit-repo-user-configを別の名前にする