2012-09-06 174 views
0

我有一個自定義的shell腳本,使從源頭Twitter的引導,然後將文件移動到我的Node.js應用程序的/ lib文件:從makefile調用shell腳本?

rm -r bootstrap 
make bootstrap 
mv -f bootstrap/css/* ../../lib/public/css 
mv -f bootstrap/img/* ../../lib/public/img 
mv -f bootstrap/js/* ../../lib/public/js 

從殼體這只是正常使用./make_bootstrap.sh

現在我爲我的完整應用程序(主要編譯coffeescript和簡單的測試初始化​​)創建了一個Makefile,並且想要執行此自定義shell腳本來構建引導程序的命令。這裏是我的makefile

REPORTER = spec 

all: build 

build: 
    @./node_modules/coffee-script/bin/coffee \ 
     -c \ 
     -o lib src 

bootstrap: 
    @./src/bootstrap \ 
     ./make_bootstrap.sh 

clean: 
    rm -rf lib 
    mkdir lib 

watch: 
    @./node_modules/coffee-script/bin/coffee \ 
     -o lib \ 
     -cw src 

test: 
    @./node_modules/mocha/bin/mocha \ 
     --reporter $(REPORTER) \ 
     test/*.coffee 

.PHONY: build bootstrap clean watch test 

與相關的命令是'make bootstrap'。然而,當我運行命令行做引導我得到的是這樣的錯誤:

make: ./src/bootstrap: Permission denied 
make: *** [bootstrap] Error 1 

我原本以爲這是一個權限錯誤,但即使在設置文件(CHMOD 777)的結果沒有任何權限。此時我已給予完全權限的文件包括根Makefile,引導文件夾中的自定義shell腳本以及引導文件夾本身中的makefile。

+0

什麼是'。/ src/bootstrap'?因爲你正試圖執行它,而不是你的腳本。 – Oktalist

+0

您是否有權訪問該文件夾。您不僅需要文件權限,還需要讀取包含文件夾的權限。 – jsj

+0

./src/bootstrap包含bootrstrap源碼的目錄?你爲什麼試圖執行一個目錄作爲命令?也許它應該是'cd src/bootstrap; 。/ make_bootstrap'。 – Barmar

回答

1

編輯:

基於我已經重構這個

bootstrap: 
    rm -r src/bootstrap/bootstrap 
    $(MAKE) -C ./src/bootstrap bootstrap 
    mv -f src/bootstrap/bootstrap/css/* lib/public/css 
    mv -f src/bootstrap/bootstrap/img/* lib/public/img 
    mv -f src/bootstrap/bootstrap/js/* lib/public/js 

此評論複製shell腳本我有過(移動對於我自定義的項目文件)的功能,但仍使用標準Twitter Bootstrap附帶的makefile。更清潔......我將在下面提供原始答案,以便人們可以看到進化和重構。

OLD ANSWER

好的,謝謝你們在朝着正確的方向指向我的意見。該解決方案的工作原理:

bootstrap: 
    cd ./src/bootstrap; \ 
     ./make_bootstrap.sh 

會發生什麼是它執行更改目錄(在子過程,因此不會影響在哪裏運行,從做),然後執行自定義腳本。看起來好像我可能不應該在makefile中使用這樣的東西,因爲它感覺「髒」;也許更乾淨的方法是自己調用LESS編譯器並模仿bootstrap提供的makefile。儘管如此,我仍然把它用於一個小小的個人項目。

+0

'。/ src/bootstrap'中必須有makefile。我建議你將'mv'命令移動到該makefile中,將此答案中的命令更改爲'$(MAKE)-C。/ src/bootstrap bootstrap',並完全廢除腳本。 – Beta

+0

您應該繼續使用bootstrap提供的makefile,但是您可以將命令移出腳本並移至主makefile中,因爲它們非常簡單。 – Barmar

+0

感謝大家提供關於重構的提示,請參閱我的解答。沒有更多的shell腳本和它的純粹的makefile!比今天下午的回購看起來要漂亮多了。 – Msencenb