2017-05-11 11 views
-2

BuildToolsをダウンロードしてjarをコンパイルするためのbash/shellスクリプトを作成しようとしていますが、その後それらを私のWebサーバー(/var/www/html/jars/)スクリプトの中で/home/buildtools/Bash/ShellスクリプトでBuildToolsを使用してMinecraftサーバーjarをダウンロード/ Buidlingする

BuildToolsはjarsをダウンロード/コンパイルし、ベースディレクトリ内のwork/にあるバニラジャーを除いてベースディレクトリに配置します。

jarをダウンロード/コンパイルしても、すべてが目的のディレクトリに移動しているわけではありません。

これは、現時点では私が使用していたコード(私はすべて提供するために、関連するかもしれないと思う)です:

directory="$(pwd)/" 
jar="BuildTools.jar" 
path="${directory}${jar}" 
output="/var/www/html/jars" 
version=$1 

if [[ (-d "BuildData") || (-d "Spigot") || (-d "CraftBukkit") || (-d "Bukkit") || (-d "work") || (-d "apache-maven-*") || (-f "BuildTools.log.txt") ]]; then 
    echo "Cleaning up..." 
    rm -f -r BuildData/ Spigot/ CraftBukkit/ Bukkit/ work/ apache-maven-*/ 
    rm -f BuildTools.log.txt spigot-*.jar craftbukkit-*.jar vanilla-*.jar 
fi 

if [[ ! -f "${jar}" ]]; then 
    echo "Downloading BuildTools..." 
    wget https://hub.spigotmc.org/jenkins/job/BuildTools/lastSuccessfulBuild/artifact/target/BuildTools.jar -O ${jar} 
    chmod 775 ${jar} 
fi 

if [[ ! -z "${version}" ]]; then 
    echo "Compiling jars for version ${version}..." 
    java -jar ${jar} --rev ${version} 
else 
    echo "No version specified." 
    echo "Compiling jars for the latest version..." 
    java -jar ${jar} --rev latest 
fi 

if [[ (-f "${directory}spigot-*.jar") || (-f "${directory}craftbukkit-*.jar") ]]; then 
    echo "Compilation is done. Re-organizing..." 

    if [[ ! -z "${version}" ]]; then 
     mv work/minecraft_server.*.jar ${directory}/vanilla-${version}.jar 
    else 
     mv work/minecraft_server.*.jar ${directory}/vanilla-latest.jar 
    fi 

    echo "Moving jars to the webserver..." 
    mv ${directory}/vanilla-*.jar ${output}/ 
    mv ${directory}/spigot-*.jar ${output}/ 
    mv ${directory}/craftbukkit-*.jar ${output}/ 
else 
    echo "Could not re-organize, the jars hasn't been moved." 
fi 

編集: コマンドを実行することにより:何らかの理由で./compile.sh 1.8.6 jarファイル正しい名前ではありません。

Result of the code.

directory="$(pwd)/" 
jar="BuildTools.jar" 
path="${directory}${jar}" 
output="/var/www/html/jars" 
version=$1 

if [[ (-d "BuildData") || (-d "Spigot") || (-d "CraftBukkit") || (-d "Bukkit") || (-d "work") || (-d "apache-maven-*") || (-f "BuildTools.log.txt") ]]; then 
    echo "Cleaning up..." 
    rm -f -r BuildData/ Spigot/ CraftBukkit/ Bukkit/ work/ apache-maven-*/ 
    rm -f BuildTools.log.txt done.txt spigot-*.jar craftbukkit-*.jar vanilla-*.jar 
fi 

if [[ ! -f "${jar}" ]]; then 
    echo "Downloading BuildTools..." 
    wget https://hub.spigotmc.org/jenkins/job/BuildTools/lastSuccessfulBuild/artifact/target/BuildTools.jar -O ${jar} 
    chmod 775 ${jar} 
fi 

if [[ ! -z "${version}" ]]; then 
    echo "Compiling jars for version ${version}..." 
    java -jar ${jar} --rev ${version} 
    echo "done" > done.txt 
else 
    echo "No version specified. Compiling jars for the latest version..." 
    java -jar ${jar} --rev latest 
    echo "done" > done.txt 
fi 

if [[ -f "done.txt" ]]; then 
    echo "Compilation is done. Re-organizing..." 

    for x in $(find ${directory} \(-name "*.jar" \)); do 
     name=$(basename "${x}" ".jar") 

     if [[ ${name} =~ ^(spigot|craftbukkit|minecraft_server)(-)?(.*)? ]]; then 
      fullname="${name}.jar" 

      echo "Jar found: ${fullname}, Moving to webserver..." 

      if [[ ! -z "${version}" ]]; then 
       outpath=${output}/${version} 

       if [[ ! -d ${outpath} ]]; then 
        mkdir ${outpath} 
       fi 

       mv -f ${x} ${outpath}/${fullname} 
      else 
       outpath=${output}/latest 

       if [[ ! -d ${outpath} ]]; then 
        mkdir ${outpath} 
       fi 

       rm -f -r ${outpath} 
       mv -f ${x} ${outpath}/${fullname} 
      fi 
     fi 
    done 

    echo "Jars uploaded." 
else 
    echo "Could not re-organize, the jars hasn't been moved." 
fi 

そしてさらに、私は私はそれをどのように行うか、のみ各アップロード(バニラ、スピゴット、Craftbukkit)の一つのファイルを持っていたいですか?

+0

'set -x'を使用して、スクリプトのデバッグ出力を確認してください。 –

答えて

1

条件式の中に括弧があるだけでなく、式の間違った部分でグロブを使用しようとしているためです(グロブのようなテストは使用できません)。

はあなたのような何かを行う必要があり、この問題を解決するには、次の

#set nullglob so non-matching globs return an empty string instead of an error 
shopt -s nullglob 
# assing the globs to arrays, note the quoting 
spigotfiles=("${directory}"spigot-*.jar) 
bukkitfiles=("${directory}"craftbukkit-*.jar) 
# using an array without an index gives us the first item in the array 
if [[ -f "$spigotfiles" || -f "$bukkitfiles" ]]; then 
    ... 
fi 

括弧と同じエラーがあなただけの括弧(例えば[[ -d "dirname" || -d "fooname" ]]

を除去することで処理できる、あまりにもあなたのクリーンアップコードでありますまた、(コマンドの一部のように)あらゆる場合に変数の展開(つまり"${jar}"など)を引用する必要があります。

また使用[[ ! -z $foo ]]

は同じです [[ -n $foo ]]

編集:

for x in *.jar; do 

たりしたい場合:

for x in $(find ${directory} \(-name "*.jar" \)); do 

ではなく、単にしないでくださいバージョン管理されたファイルのみ次のようにすることができます:

for x in *"-${version}.jar"; do 

クリーンアップチェックにはまだ括弧がありますが、上記の回答を参照してください。

そして、スクリプトの最後に、これらの線は逆効果です:

  if [[ ! -d ${outpath} ]]; then 
       mkdir ${outpath} 
      fi 
      rm -f -r ${outpath} 
      mv -f ${x} ${outpath}/${fullname} 

あなたが最初のディレクトリを作成すると、それを削除し、それに物事を移動しよう(ヒント:rm行を削除します)

+0

編集を参照してください、私はいくつかのことが働いているが、何か壊れている。 – Azoraqua

+0

私はLinuxの原則についてはかなり新しくなっていますが、そのほとんどは多くのことを助けてくれています。上記のように感謝しますが、あなたのアドバイスを使って完全に書き直そうとします。しかし、私はSpigot - *。jar、Craftbukkit - * jarとminecraft_server。*。jarだけを望み、すべて私のWebサーバーにアップロードします – Azoraqua

関連する問題