Deleted articles cannot be recovered. Draft of this article would be also deleted. Are you sure you want to delete this article?

シェルスクリプトでコマンドライン引数をオプションとして解析したいときは、getoptsを使うのが一般的なやり方だ。 でも、getoptsはGNUスタイルの長いオプションに対応していないので、--helpとかのオプションを受け付けれないという欠点がある。そんなときでも、zshならzparseoptsというコマンドを使えば長いオプションでも解析できるので紹介する。 基本パターン まずは一番簡単なパターンとして、次の3つのオプションを解析する例を紹介する(mvコマンドのオプションをイメージしている)。どのオプションも引数は取らない。 -v --help --version このオプションをパースするには、zparseoptsというzshの組み込みコマンドを使って、次のように書く。 # !/bin/zsh local -A opthash zparseopts -D -A opthash -- -
ほんとに単にコメントが1行あるだけ。自分で一から~/.zshrcを書きたい人向け。 1を選んだ場合 メインメニューに進む。このあとzshの個別の設定についてどうするか質問されるので、それに答えていって、その結果を元に~/.zshrcを作ってくれる。なんか操作しにくいし、はっきりいって面倒。 2を選んだ場合 おすすめの~/.zshrcを作成する。おすすめの~/.zshrcというのは/etc/zsh/newuser.zshrc.recommendedに書いてあるので、要するにcp /etc/zsh/newuser.zshrc.recommended ~/.zshrcしてくれる。 けっこう妥当な設定が書いてあるので、これをそのまま使うのもそんなに悪くないと思う。たぶん内容はディストリビューションとかによって微妙に違うと思う。僕のUbuntu 14.04の場合の例は以下。 # Set up the
zsh では普通はオプションを指定したらそのシェルが終了するまでずっと有効なんだけど、そうじゃなくて関数内だけで有効にする方法があるので紹介する。 zsh には local_options というオプションがある。これを有効にすると、関数を出た時に関数を呼び出した時点でのオプション設定が復元される。つまり、関数の中で設定したオプションをその関数内だけで有効にする、という動作になる。 例を紹介する。 glob_dots を関数の中だけで有効にする例 glob_dots は、* でワイルドカード指定したときにドットで始まるファイル名にもマッチするようになるオプション。 デフォルトでは無効になってるんだけど、シェルスクリプトとかzshrcの中に関数を書いている時とかでたまに有効にしたくなることがある。でも適当に有効にすると影響範囲が大きくなりすぎて困る。そういうときに local_options
僕はコマンドラインで使うシェルスクリプトを書くことがけっこうあるんだけど、インターフェイスというか呼び出し方はとても大事だと思ってるので、そこにわりと時間をかけて考えるようにしてる。実装はいつでも変更できるけど呼び出し方を変えた時は利用者にも変更を強いるので、できれば最初から良い設計で作りたいと思っている。 そこで、僕がシェルスクリプトのオプションとか引数とかの仕様を決める上で注意していることをまとめてみた。シェルスクリプトや、その他コマンドラインのツールを作るときに参考にしてほしい。 シェルの種類は bash や zsh を想定してるけど、実装によらない話なのでどんなシェルでも使えると思う。 エラーの時に Usage (使い方ヘルプメッセージ)を表示するのはやめる エラーになった時に Usage (使い方ヘルプメッセージ) を表示するスクリプトがあるけど、やめたほうがいいと思う。例えばこ
Qiita 見てたらこんな投稿を見つけた。 Zsh - よく作業するDirをBookmarkするshellスクリプト - Qiita だいたい、よく使うディレクトリに cd したいとき cd ~/work/project/ruby/web とか長い名前を打つのはめんどくさい。$CDPATH を通しておくっていう手もあるけど、タブで補完したときに候補がいっぱい出たりして微妙に便利じゃない。そんなときにこれを使えばディレクトリの移動が簡単になる。 ちょっと改良の余地があるというか、タブで補完できるようにしたらもっと便利になると思って、独立した zsh のプラグインとして書き直したので紹介する。 このプラグインでできること cd-bookmark というプラグインを作った。これをインストールすれば cd-bookmark というコマンドが使えるようになる。 こいつを使えばよく使うディレクトリに別
zsh には編集子(modifiers)というのがある。 こいつを使うと、グロブ展開(ワイルドカード展開)の結果をいろいろと編集できるようになる。 簡単な例 とりあえず例を見てもらったほうが早いと思う。 # 今このディレクトリにいる % pwd /home/mollifier/tmp # ファイルが2つある % echo * fuga.txt hoge.txt # :a は編集子の一種で、フルパスに変換する % echo *(:a) /home/mollifier/tmp/fuga.txt /home/mollifier/tmp/hoge.txt # :r も編集子の一種で、ファイルの拡張子の部分を取り除く % echo *(:r) fuga hoge # 並べて書けば2つ以上使うこともできる % echo *(:a:r) /home/mollifier/tmp/fuga /home/mo
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く