「cp」は「mvn clean」以降は動作が異なります。

「cp」は「mvn clean」以降は動作が異なります。

そのため、Javaプロジェクト用のビルドスクリプトを作成していますが、mvn cleanローカル開発中は実行されません。だから開発者が-k変数$DEV_BUILD1

function build_war {
   if [ "$DEV_BUILD" -ne 1 ]; then
      mvn clean
   fi
   cd "$PROJECT_HOME"
   # Copy over static web files to ROOT
   mkdir -p "$WAR_HOME"

   cp -r js "$WAR_HOME/js"
   rm -r "$WAR_HOME/js/src/com"
   ...
}

フラグなしでスクリプトを実行すると、最終-kコンテンツが内部に表示され、コマンドが機能します。ただし、そのフラグを使用してスクリプトを実行すると、別のディレクトリにディレクトリがあり、コマンドが失敗します。js$WAR_HOME/jsrm-kjsrm

なぜこれが起こるのか知っている人がいますか?

編集する

@Kusalanandaのコメントに従って、ディレクトリが以前に存在していたことを確認するためにスクリプトにいくつかの行を追加しました。

if [ ! -f "$WAR_HOME/js" ]; then
  echo "js doesn't exist!!"
fi

cp -r js...

フラグがあるかどうかにかかわらず、「存在しません」というメッセージが表示されます-k

ベストアンサー1

使用するとき

cp source destination

destination既存のディレクトリなので、sourceそのディレクトリに削除されます。

したがって、コピーする前にそのディレクトリは削除されないcpため、動作が異なるように見えます。js$WAR_HOME再び同じ宛先パスを持ちます。

おすすめ記事