早くシェルを書くために
Posted: June 29, 2014
久しぶりの投稿である。
最近シェルをたくさん書いている。
一年前の今頃はシェルスクリプトを書く事などまったくなく、linuxコマンドを組み合わせて処理をするのなんて一体なんの役に立つのかと疑問を持ってさえいた。
しかしながら、ファイル操作のためにはシェルは非常に有効だと思う。なんとなく。
まあさておき、シェルをたくさん書いていく中でふと思った。
もっと早く書けないだろうか。
書生が書くときに気をつけているのは、
- 使用するコマンドは最初に変数定義する
- デバッグも込めてechoを多用
- 実行した時のログを保存
- 完成したらスクリプト内のコードを整形
などなど。
これらのことを意識して書いているが、いつもいつも次の問題を生じる。
- コマンド変数の混乱(コードによって変数名とコマンド名が同じだったり、異なっていたり汗)
- 完成された整形済みのコードを後日修正する際にいちいち整形する手間が生まれる
- コマンドを事前に変数定義されていると、完成後の修正で面倒(面倒になってコマンドをあとで一括置換すると変数定義の部分の置換もされるので気をつける必要があるなど)
- 実行ログなどの保存期間の考慮
- sedとかawkとか、正規表現とか、コマンドの使い方を毎回忘れる
いやはや、仕方ないのだ。一年前はシェルスクリプト何それみたいな状況だったのだから。
君が失敗したことには興味はない。そこから君がどう立ち上がるかに興味があるのだ
そうなのだ。かのエイブラハムリンカーンもかくかたりきなのである。
書生のやり方は自己流になってしまうかもしれないが、なんとなくこれらの問題点を解消するためには以下のルールを設けてシェルを作成したら良いのではないかと思った。
- コマンドは全部別ファイルで定義し、ファイルを読み込む
- スクリプト内で書いていくコマンドは変数名ではなくコマンド名で書いて最後に一括置換する
- ログ関係の保存期間についても別ファイルで定義、管理し、それを再利用する
さて、こうなると残された問題点は、修正時のコードの整形だ。
vimなどでは、オートインデント機能があるが、昔、これを使用したら何かのバグか分からないが整形というよりはもっと崩されてしまったため、こういった機能には頼らず、
極力、まず全部左によせて、次に矩形選択、スペースを挿入するというやり方をしていた。
これに関しては何かもっと便利なツールとかやり方が存在していそうだ。ちょっと調べてみるか。。。
調べたところ、vimでノーマルモードで
\=G
とすると良いらしいが、多分これをした時により崩れた気がするな。。。そもそもこういったコマンドは標準でlinuxに入っているものなのだろうか。。。
ちょっと面倒ではあるが、インデント用のシェルを書くか。。。
そもそもこんなので悩んでいる人あんまりいないのだろうか。
などと思いつつテレビでブラジルW杯のブラジルV.S.チリの延長戦を見ているのであった。
日本代表が去ってしまいW杯の楽しみが個人的に半減した結果、書生の興味は開催国ブラジルと、ぼこぼこにされたコロンビアの試合(5時からウルグアイと)。
まあそれはよしとして、
W杯が終わるまでにはシェルマスターになっていたいものである。