2017-08-18 7 views
0

私のスクリプトtry mvn clean installすべてのプロジェクトで、devブランチに切り替えてプルしようとする前に実行してください。スクリプト内の構文エラー

successString="[INFO] BUILD SUCCESS"; 
file="mvnoutput"; 
red=$'\e[1;31m'; 
grn=$'\e[1;32m'; 
end=$'\e[0m'; 

function checkResult 
    if grep -Fxq "$successString" $file 
    then 
     echo -en "${grn}[${1}]Build ok${end}"; 
    else  
     echo "${red}[${1}]Error in mvn clean install${end}"; 
     exit 1; 
    fi; 
end 

function pullAndSwitchDevBranch 
    git checkout dev; 
    git pull origin dev; 
end 

cd api-pay-commons/; 
pullAndSwitchDevBranch; 
touch mvnoutput; 
mvn clean install -U > mvnoutput; 
checkResult PAY; 

なぜこのエラーが発生しましたか?

行17:最後:コマンドが見つかりません./script.sh:行20:予期しないトークンgit' ./script.sh: line 20: Gitチェックアウトdevの近くに構文

エラー;」

答えて

4

"fish"タグを使用しているので、これをfishシェルで実行していると仮定しています。

もしそうなら、これは有効な魚のスクリプトではありません。 Fishは明示的にPOSIX互換ではありませんので、構文を読んでみてください。 (そうでない場合は、あなたのタグを修正してください)

red = $ '\ e [1; 31m';

魚は変数を設定するのにvar=valueを使用しません。それはset var valueを使用します。

魚にも$''の引用符がありません。代わりに、バックスラッシュエスケープは、の外側には、引用符のと解釈されます。

これはset red \e"[1;31m"となります。また、魚はset_colorの組み込み関数を提供しています。この関数は、指定された色のエスケープシーケンスを出力します。したがって、これはset red (set_color red)(またはset_colorと後で呼び出すことができます)となります。

then 

魚はif condition; then dosomething; fiを使用していません。それはif condition; dosomething; endです。

echo -en "${grn}[${1}]Build ok${end}"; 

魚は"${var}"を使用していません。また、関数の引数を呼び出さない$1など。

echo -ens "$grn" "[$argv[1]]" "Build ok" "$end"のようになります。

exit 1 

魚は現在、機能からは許可されていません。 return 1にして、結果を外部から確認してください。

さらに、あなたは私が知っているどのシェルでも典型的なスタイルではない場所のセミコロンを使用しています。


魚を使用していないが、POSIX互換のシェル(bashなど)を使用している場合は、これも無効です。主な問題は、function something; dosomething; endを使用していることです。 bashで、それは

function something() { 
     #dostuff 
} 

そして

something() { 
    #dostuff 
} 
+0

徹底的な答えだろう純粋なPOSIX、中だろう。素晴らしい! –

関連する問題