2
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

アプリケーションバンドル内のスクリプトのパスを得るには

Last updated at Posted at 2014-08-23

背景

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

Link

2
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?