dashではpushd, popdが使えない。

Debianでは/bin/shは、dash、つまりDebian Almquist shellへのシンボリックリンクになっています。これはPOSIX準拠のシェルです。ここまでは知っていたのですが、組み込みコマンドのpushdやpopdが使えない(無い)ことに気づきました。!!!ということは、pushdやpopdはPOSIX準拠のコマンドではなかったということ?

早い話、shebangが/bin/bashになっている下記のコードが使えますが、

#!/bin/bash
pushd /tmp/hoge >/dev/null
printf "%-20s : " "common data"
git pull
for d in $(find /tmp/hoge/data/* -type d -prune)
do
  pushd $d >/dev/null
  printf "%-20s : " $(basename $d)
  git pull
  popd >/dev/null
done
popd >/dev/null

/bin/shになっている場合ではエラーになります。

#!/bin/sh
pushd /tmp/hoge >/dev/null
printf "%-20s : " "common data"
git pull
for d in $(find /tmp/hoge/data/* -type d -prune)
do
  pushd $d >/dev/null
  printf "%-20s : " $(basename $d)
  git pull
  popd >/dev/null
done
popd >/dev/null

自宅でも仕事できるのは良いのですが…。

VPNで接続して家からでも仕事できるのは良いのですが、なんかいつまでも続けてしまって切りが無いですね。予定日過ぎている現時点では、平日日中も在宅勤務できると安心なんですけどねぇ。

LaTeXでディレクトリツリーを表示する。

treeコマンドを普通に使うと、

my-first-blueprint/
|-- files
|   `-- tmp
|-- manifests
`-- templates
    `-- etc
        |-- apt
        |-- cloud
        |-- cron.d
        |-- ldap
        |-- openldap
        |   `-- cacerts
        |-- pam.d
        |-- perl
        |   `-- XML
        |       `-- SAX
        |-- security
        |-- ssh
        |-- update-notifier
        `-- xml

19 directories

と表示されますが、バッククオートがLaTeXではフォントによっては違った見え方になります。なので、

$ tree -d my-first-blueprint | sed 's/`/+/g'
my-first-blueprint/
|-- files
|   +-- tmp
|-- manifests
+-- templates
    +-- etc
        |-- apt
        |-- cloud
        |-- cron.d
        |-- ldap
        |-- openldap
        |   +-- cacerts
        |-- pam.d
        |-- perl
        |   +-- XML
        |       +-- SAX
        |-- security
        |-- ssh
        |-- update-notifier
        +-- xml

19 directories

としてやれば、lstlisting環境などで意図どおりの表示になるのですが、treeコマンド自体のオプションで指定できないんでしょうかね。

ちなみに、LANG=en_US.UTF-8になっている、Ubuntu 10.04では、treeコマンドのパス表示に使われる記号が全角の罫線になっています。

my-first-blueprint/
├── files
│  └── tmp
├── manifests
└── templates
   └── etc
          ├── apt
          ├── cloud
          ├── cron.d
          ├── ldap
          ├── openldap
          │   └── cacerts
          ├── pam.d
          ├── perl
          │   └── XML
          │       └── SAX
          ├── security
          ├── ssh
          ├── update-notifier
          └── xml

19 directories

罫線記号は全角なのでlstlistingなどの環境の中ではもれなくズレます。LANG=Cに指定すればバッククオートの形式になります。Sidではならないんですけど、何ででしょう。バージョンの違い? 1

余談。

最初、LANG=Cすりゃええやん、と気づかず、下記のようなワンライナー書いてました。ダサ。

$ tree -d my-first-blueprint/ | sed '{
s/└─/+-/g
s/├─/+-/g
s/─/--/g
s/│/| /g
}'
1

Lucidでは1.5.3, Sidでは1.6.0です。

最近よく考えていること。

git pullするのとrsyncでPUSHするのとどっちがええかなぁ。

processingが面白そう。

オライリーの ビューティフルビジュアライゼーション を読んで、面白いなと思った記事で使われていたのが、 processing というプログラミング言語。開発元からダウンロードして展開し、processingというシェルスクリプトを実行すると、専用エディタが起動します。

File → Sketchbook → modes → Java → examples → Books → Visualizing data → ch6-zipdecode → round_09c_focus_handlingというサンプルを開いて、実行してみたのが次の動画です。数字はキーボードで入力し、Backspaceで消しています。

[http://www.youtube.com/watch?v=_K0OxAX44H0:movie]

このサンプルではフォーカスの制御を行うコードが約400行、色の制御を行うのが約50行です。専用エディタだと、Runボタンですぐに実行できるのは良いのですけど、普通に自分の好きなエディタでコード書いて、コマンドラインで実行するとかの方がうれしいので、ちょっと調べてみようかと思います。ちなみにDebianでもlibprocessing-core-javaという名前でパッケージになっていますが、名前の通りコラライブラリだけなので、Upstreamで配布されているものと比べ、どのくらいできるのかも気になるところです。

ビューティフルビジュアライゼーション