オプション付き実行可能Systemtapスクリプトの作り方

上記テトリスで使われていたトリックがとても便利だったので拡張させていただきました。

通常、オプションを渡す必要がなければ、以下のshebangで実行可能なスクリプトが作れます。

#!/usr/bin/env stap

しかしこれだと、オプションを渡せません。そこで、Systemtapのコメントスタイルに注目します。
Systemtapでは、Shell、C、C++のコメントスタイルをサポートしています。

  • #以降改行まで
  • /**/で囲まれた部分
  • //以降改行まで

ですが、シェルスクリプトでは、//はコメント行ではなく、パスの一部と解釈されます。なので、以下のように書けばオプションを渡すことができます。

#!/bin/sh
//usr/bin/env stap options $@ $0; exit $?

さらに$@がついているので、コマンドラインからのオプション指定も可能になります。
stapgamesでは、ゲームスクリプトからの相対パスでtapsetを指定したかったので、以下の2行をスクリプトの頭に持ってくるようにしています。

#!/bin/sh
//usr/bin/env stap `dirname $0`/../tapset $@ $0; exit $?

追記:
上記例が一部間違ってました。