Bash
mvn clean
之後cp
的行為不同
因此,我正在為 Java 項目編寫建構腳本,並且不會
mvn clean
在本地開發期間執行。所以我為開發人員創建了一個標誌,-k
將變數設置$DEV_BUILD
為1
.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