シェルスクリプトのファイル内未定義変数を調べる

どれが外部ファイルで宣言されているのかわからない

シェルスクリプトでかなりの数の変数を外部ファイルで定義をしているものに出会った時に、どれが外部宣言なのかを調べるために作りました。check.py < sample.shって感じで使います。




evalで変数展開して組み合わせて使っている変数には対応していません。
hoge=foo
fuga=bar
foobar=yes

eval echo \$$hoge$fuga
# yes

NoLockScreen2 Public beta test

NoLockScreen

NoLockScreenご存知ですか?そこそこ古くからあるtweak(CydiaUpdates.netを見る限りは2010/10/05)でアラートがなく、パスコードロックもされていないようであればiPhoneの特徴的なslide to unlockをスキップしてくれる代物で愛用しています。

が、初版の公開から一切のアップデートが行われておらずiOS5での新しいバナーシステムへの対応は行われていませんでした。さらにiOS6ではアプリが最前面にある状態(SpringBoardではない)でロック後にロックボタンでロックを解除すると、ロック解除後にすぐさまロックされてしまうバグがあります。

この状態で放置されており、自分的にも欲しいtweakでしたので対応版をつくりました(こんな時オープンソースならフォークするのが楽なのにと思います、なので将来的にはgithubで公開予定です)。

NoLockScreen2

上述の問題点である

  • iOS 5+でロックスクリーンにバナー表示があるのに自動アンロックしてしまう対応不足
  • iOS 6でロックされてしまうバグ

を解消したNoLockScreen2をパブリックベータテストします。iFileでインストールするのが一番楽だと思います。問題なければBigBoss行き。アイコンは四苦八苦してたら@renz0ne23さんが作ってくれました!多謝!

jp.r-plus.nolockscreen2_0.0.1-11_iphoneos-arm.deb

依存関係は以下です。

Depends: mobilesubstrate, preferenceloader, firmware(>= 4.0)
Conflicts: com.openbrew.nolockscreen

DicActivity


ActionMenuで選択文字列を各種辞書やGoogle検索(Safari)に投げ込むDaijirin ActionMenu PluginをiOS 6から使えるようになったUIActivity+UIActivityViewControllerで作り直しました。以下課題というか問題点

  • 表示時に一気に各ActivityClassをalloc initするコストがやはり高いのか、iPhone 4では動作速度にちょっと不満がでるレベル(といっても0.1sぐらいの差ですが)
  • オプション追加する度にアイコンで四苦八苦する
  • アルファ画像しか使えない仕様なので視認性も期待したほど向上していない

お蔵入りの可能性が高そうですかね

execリダイレクト

exec redirect-out
exec使ってますか?bashの組み込みコマンドのexecはコマンドの変更の他にリダイレクトの動的変更ができます。こんなシェルスクリプトを実行すると、何もしなければファイルディスクリプタ1番の/dev/stdoutに出力されます。
#!/bin/sh
echo "first"

これを以下のようにすると、途中で全体のファイルディスクリプタをexecコマンドで変更できます。この場合、firstはstdoutにsecondはfileに出力されます。

#!/bin/sh
echo "first"
exec > file
echo "second"
exec redirect-in
リダイレクトインも同様に動的変更ができますが、おもな使い所はwhile readだと思います。普通ファイルから1行ずつ読み込んで処理を行う場合は
while read LINE; do
  # do something...
done < file
としますが、標準入力を変更する事で以下のように書くことができます。
exec < file
while read LINE; do
  # do something...
done

doneのところまで読み進まずとも何のファイルを入力とするのかわかる点がメリットでしょうか。デメリットは他人が読んだ時にわからない可能性が高い点です!調べざるを得なかったよ!他人が読みやすいプログラムを書いたほうが絶対に良いので、使わない方が良いでしょう!

blogger.vimでvimからpost

install pandoc
  1. brew install haskell-platform
  2. cabal update
  3. cabal install cabal-install
  4. cabal install pandoc
install vim-plugins
  1. metarw.vim
  2. blogger.vim
install ruby 1.9.2+(blogger.vim required)
  1. brew install ruby
prefer brew and cabal commands
  1. sudo vim /etc/paths

先頭に/Users/r-plus/.cabal/bin, /usr/local/binを追加

config blogger.vim

自分のbloggerの設定と1.9.2+のRubyへのPATHを指定。


install blogger.vim required gems
  1. gem install nokogiri
  2. gem install net-https-wrapper
Post From Vim!

これでmarkdown形式で書いたバッファから:w blogger:createでBloggerに投稿されます。
が、なにやら自動で改行タグが入れられてしまったのでxmlを圧縮するパッチを書きました。https://github.com/r-plus/blogger.vim/commit/844e1cfc387c49e858daefbb943ab62dbfd4dbdd しかしこれだとpreタグの中の改行も削除してしまう。しょうがないので複数行のはgistにでもなげようかと思ったがscriptタグの閉じタグが内包表記になってしまう。なんとままならない事か。

テキストはtextileで書こう!

■textileを使おう!

いえmarkdownの方が好みなのですが会社でRedmineを使っているので、ドキュメントはtextileで書いておけばそれをコピペするだけでチケットに綺麗に書けるわけです。この書きためたtextileをローカル閲覧する際にHTMLで見れる環境を構築しました。

vim-quickrun+openbrowser.vimで開くとかApache使わないでinvisible.js使ったり色々模索してますがこれはそのうちの1つです。ちなみにこのBloggerはmarkdownで書いてます。

■Apacheを導入

とりあえずWindows向けのApacheをインストールします。

■PHPをインストール

PHPを使うのでインストールしておきます。

■httpd.confの編集

textileのTypeとActionを追加しておきます。(要mod_action)

AddType text/textile textile
Action text/textile /lib/tt.php

conf読み直しのためにApacheを再起動。

■Parserをlibにつっこみます

これで拡張子が.textileのtextile記法のファイルをtextileディレクトリにでも突っ込んでブラウザでlocalhost/textile/hoge.textileとかアクセスすればHTMLで表示されるよ!

cssなしの生htmlもなんなので、会社ではtt.phpで生成しているhtmlにcssをリンクさせて表示させてます。 丸々参考にさせてもらったFenrir川端さんのGitHub のように、Markdown ファイルを HTML として表示したいに感謝。