我嘗試創建一個npm包,它可以作爲shell的命令啓動。我有package.json
npm包中的二進制文件
{
"name": "myapp",
"version": "0.0.6",
"dependencies": {
"async": "",
"watch": "",
"node-promise": "",
"rmdir": "",
"should": "",
"websocket": ""
},
"bin": "myapp"
}
和myapp
#!/bin/bash
path=`dirname "$0"`
file="/myapp.js"
node $path$file $1 &
但我得到一個錯誤:
module.js:340
throw err;
^
Error: Cannot find module '/usr/local/bin/myapp.js'
at Function.Module._resolveFilename (module.js:338:15)
at Function.Module._load (module.js:280:25)
at Function.Module.runMain (module.js:497:10)
at startup (node.js:119:16)
at node.js:902:3
的問題是,myapp.js是另一個目錄。我如何從腳本中獲取這個目錄名稱?或者也許有更好的方法來做到這一點?
爲什麼不要給cmdline上的myapp.js'目錄路徑'調用腳本作爲'./scriptname.sh'directory_path''然後而不是'node $ path $ file $ 1&'use'node $ 1/$ {file}' ,如果你這樣做,你不需要'path = \'dirname「$ 0」\'' – PradyJord
因爲這個文件是一個包的一部分。我希望這個腳本是一個簡單的全局命令。 – ciembor
您需要將'$ 0'符號鏈接路徑解析爲實際的文件路徑。你看過http://stackoverflow.com/questions/4774054/reliable-way-for-a-bash-script-to-get-the-full-path-to-itself? – loganfsmyth