Bash

mvn clean 之後cp 的行為不同

  • April 16, 2018

因此,我正在為 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/js並且rm命令有效。-k但是,如果我使用標誌執行腳本,則另一個js目錄中有一個目錄,並且rm命令失敗。

有人知道為什麼會發生這種情況嗎?

編輯

根據@Kusalananda 的評論,我在腳本中添加了幾行程式碼來驗證該目錄之前是否存在,只是為了確定。

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

cp -r js...

-k無論有沒有標誌,我都會收到“不存在”的消息。

當你使用

cp source destination

並且destination是一個現有目錄,然後source將被放入該目錄。

所以cp行為看似不同,因為在使用相同的目標路徑再次複製之前沒有刪除js目錄。$WAR_HOME

引用自:https://unix.stackexchange.com/questions/438147