de[v|b]log

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

引き続きzshrc内部をnative-zshスクリプトに移行する作業を行っていた。 特に今日は個人で作成しているライブラリをサブコマンドとして持っているhim(himajinに由来)コマンドとその中身の更新をしていた。 特に新しいことはなかったが、これまで溜まってきていた遺産をきれいに出来たので良いと思う。

進捗

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
31098bd [MOD] Update him with current updates
c16e3f0 [MOD] Improve him command and completion
d3c560a [COSM] Improved help message
6b3de7b [MOD] Update ssh tool help task
dc8580c [MOD] Update completion for him command
8b600d1 [ADD] Added current him library
b79745b [MOD] Update update task message
48b7187 [COSM] Make message better
41cc7d4 [DEL] Removed unnecessary comments
37da9ad [MOD] Update installing task message
0fb6ee3 [MOD] Update response value
fd8d29a [COSM] Clean up variable name for interactive task
aa07551 [DEL] Removed unnecessary variables
2593383 [MOD] Merge some tasks as base_task in plugin manager
1c05463 [MOD] Switched plugin manager into native-zsh script
c0d08ab [MOD] Update installed file list display style in plugin manager
ab31962 [MOD] Split tasks into functions
809dacf [MOD] Split configuration handler in plugin manager
b9efcc7 [MOD] Split help messages in plugin manager
75ed436 [MOD] Update him library build version
f6b7008 [MOD] Update him library built system with build log
b1b37f1 [MOD] Switched build script into shell
053f4ea [MOD] Split and switched to him library into make based script
628e12e [MOD] Update function name in him library
96e6948 [DEL] Deleted unnecessary function and completion declaration
6562619 [DEL] Removed unnecessary library from him library
4a2e9db [MOD] Integrate plugin manager into him library
7602351 [DEL] Removed unused script from him library
5eb52ec [DEL] Removed unnecessary git tools from him library
46f4654 [MOD] Integrate sign tool into him library
4804ab6 [MOD] Integrate ssh tool in him lib
30f28cd [MOD] Integrate cryption tool into him lib
a1e5826 [MOD] Clean up initialization of him lib
4772292 [ADD] Added option for initialize him command
45fbd17 [MOD] Update autoload configuraiton for him
e65a3b5 [COSM] Clean up interface of him command

内容

まずhimコマンドには以下のタスク群がある。

  • プラグインマネージャ
  • ファイルヘッダに対する情報の追加
  • sshヘルパ
  • ファイル暗号化ヘルパ

このコマンド群はすべて別の分割されたファイルに保持されている。

autoload対応

今回はまだautoloadにも対応していなかったこのコード群をなんとかするべく作業をした。 まず、autoloadの対象にするためのシンプルな手法としてビルドスクリプトを用意した。これは単純な内容なのでシェルスクリプトで記述されている。これ自体は対象のファイルを指定した順でhimというファイルに書き込んでいくだけである。(cat script >> him)

これによって、ファイル終端にくるファイルをコマンドのmain部として扱い、関数外でそのコマンドを呼ぶことでautoloadを使えるようにした。

プラグインマネージャの改善

これまでプラグインマネージャには以下の問題点があった。

  • 外部コマンドの使用
  • 構造が複雑
    • 関数が未分割

よって今回は上記を解決した。

まず外部コマンドの使用だが、これはCSV形式の設定ファイルの読み込みでcutコマンドを利用していたため(${(s:,:)var})として解決した。また関数が未分割な部分に関しては適度な粒度で分割を行った。

ここで、上記でcutを使っている部分を書き直したとしたが、そこで出た一例を示す。これは内容を改善し、後日zfcに統合したい。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
function csv_cut_example()
{
    local field_id=${1}
    local config_file_path=${2}

    local chunk=()
    local line
    foreach line ($(cat ${config_file_path})); do
        local n_line=${line// /}
        local list=(${(s:,:)"${n_line}"})
        chunk=(${chunk} ${list[${field_id}]})
    ; done

    echo ${chunk}
}

上記ではCSV構造を持つファイルのファイルパスと欲しいフィールドの番号を与えることで、そのフィールドの値の列を返すものである。 この実装ではcutに対して最低でも以下が欠けている。

  • デリミタの指定
  • 複数フィールド番号の指定

よってzfcに統合する際は上記を解決し統合したい。

TODO

  • 他の非公開コマンド群をhimコマンドに統合する。
  • cutコマンドっぽいものをzfcに追加。