背景
node-webkitやAtom Shellでやった方が実用的な気がするが、node.jsのスクリプトをOSXのアプリケーションとして動かす方法を試行錯誤していた際に、アプリケーションバンドル内に置いたスクリプトのパスを取得する必要があった。
アプリケーションバンドルを作る
echo ""|osacompile -o foo.app
エントリーポイント?の実行ファイルをシェルスクリプトに書き換える
cp /dev/null> foo.app/Contents/MacOS/applet
atom foo.app/Contents/MacOS/applet
appletの変更後の内容
#!/bin/sh
echo "Hello Qiita!"|/usr/bin/open -f
ここで、シェバングを綴り待ち得るとPowerPCはもうサポートしてないとか
意味不明なメッセージがもらえた。
俺はnode.jsを動かしたい!
しかもnodebrewの設定を活かして使いたい!
bashの-lオプションで行けた
nodeを動かす場合のappletファイルの内容
#!/bin/sh
bash -l -c 'node -e console.log\(\"Qiita\",process.version\) 2>&1'|/usr/bin/open -f
アプリケーションバンドル内のスクリプトのパスの取得
Bシェル系は${0}で自身のパスが取得出来るそうで、以下のように取得できる。
#!/bin/sh
# ${0} の dirname を取得
cwd=`dirname "${0}"`
# ${0} が 相対パスの場合は cd して pwd を取得
expr "${0}" : "/.*" > /dev/null || cwd=`(cd "${cwd}" && pwd)`
# jsのパスはcwdを基準に相対パス指定
jsPath="$cwd/../Resources/Scripts/test.js"
cmd="node $jsPath 2>&1"
bash -l -c "$cmd"|/usr/bin/open -f