0

git で pre-commit フックを実行するとエラーが発生しますが、それがわかりません。これがスクリプトで、エラーは以下のとおりです。

#!/bin/bash

# Pre-commit hook passing files through jslint and uglify

#ROOT_DIR=$(git rev-parse --show-toplevel)
JSLINT="/home/john/Projects/node/uglify/node_modules/.bin/jslint --indent 4 --white true -nomen"
UGLIFYJS="/home/john/Projects/node/uglify/node_modules/.bin/uglifyjs"
JS_TEMP_EDITOR="/home/john/Projects/node/test/generated/tmp/_combined_editor.js"
JS_COMBINED_EDITOR="/home/john/Projects/node/test/public/javascripts/editor.min.js"

# Where the editor files are located
BASE="/home/john/Projects/node/test/public/javascripts/editor/"
EDITOR=(
    "init.js"
    "utils.js"
    "validation.js"
    "main.js"
    "menu.js"
    "graph.js"
    "settings.js"
    "interview.js"
    "list.js"
    "thumbnail.js"
)

# go through each javascript file that has changed and run it rhough JSLINT
for file in $(git diff-index --name-only --diff-filter=ACM --cached HEAD -- | grep -P '\.((js)|(json))$'); do
    if  ! node $JSLINT $file 2>&1 | grep ${file}' is OK.' ; 
    then
        node $JSLINT $file
        exit 1
    fi  
done


# Erase old
> $JS_TEMP_EDITOR
> $JS_COMBINED_EDITOR

#run thru the EDITOR and cat the files into one
for editor_file in ${EDITOR[@]}; do
  cat "$BASE/$editor_file" >> $JS_TEMP_EDITOR
done


# check if  UGLIFYJS gives us an error
if node $UGLIFYJS $JS_TEMP_EDITOR 2>&1 | grep 'Error' ; 
then
    exit 1
else
        # *** THIS IS WHERE THE ERROR IS THROWN
    "node $UGLIFYJS -o $JS_COMBINED_EDITOR $JS_TEMP_EDITOR"
fi

exit 0

これは私が得ているエラーです:

.git/hooks/pre-commit: line 55: node /home/john/Projects/node/uglify/node_modules/.bin/uglifyjs -o /home/john/Projects/node/test/public/javascripts/editor.min.js /home/john/Projects/node/test/generated/tmp/_combined_editor.js: No such file or directory

テストのためにすべてのファイルのアクセス許可を 777 に変更し、CR をどこでもチェックしましたが、それでもエラーが発生します。奇妙な部分は、コマンドを実行したときです。与えられたエラーから、問題はありません!

node /home/john/Projects/node/uglify/node_modules/.bin/uglifyjs -o /home/john/Projects/node/test/public/javascripts/editor.min.js /home/john/Projects/node/test/generated/tmp/_combined_editor.js

うまくいきます。

うまくいけば、誰かが私に見えないものを見ることができます。

4

1 に答える 1

-1

あなたはおそらく欲しい:

node "$UGLIFYJS" -o "$JS_COMBINED_EDITOR" "$JS_TEMP_EDITOR"

それ以外の場合は、パス「/home/john/Projects/node/uglify/node_modules/.bin/uglifyjs -o /home/john/Projects/node/test/public/javascripts/editor.min.js」でバイナリを実行するように bash に指示します/home/john/Projects/node/test/generated/tmp/_combined_editor.js" これはエラー メッセージの内容ですが、エラー メッセージには引用符が含まれていないため、少し混乱する可能性があります。これは、引数の解析中に使用されるだけです。 . したがって、この場合、bash は、非常に長く存在しない引数 (実行するプログラムへのパス) が 1 つしかないコマンドを見てしまいます。

于 2012-09-09T01:24:35.067 に答える