使用“!”的技巧 cp在 shell 下使用作品時排除目錄,但在以下情況下不起作用make:
mkdir db09601c && cp -r !(db09601c) db09601c
/usr/bin/bash: -c: line 0: syntax error near unexpected token ('
/usr/bin/bash: -c: line 0:mkdir db09601c && cp -r !(db09601c) db09601c'
我已經把SHELL=/bin/bashMakefile 放在上面了:
PROJECT_NAME=nnr
HASH=$(shell git log -n1 --pretty=format:%h)
REVS=$(shell git log --oneline|wc -l)
SHELL=/bin/bash
build:
mkdir $(HASH) && cp -r !($(HASH)) $(HASH)
cp INSTALL.tpl INSTALL
sed -i 's/{_G_HASH}/$(HASH)/' INSTALL
chmod x INSTALL
echo $(REVS).$(HASH) > $(HASH)/VERSION
tar czf $(PROJECT_NAME)-$(REVS).$(HASH).tar.gz $(HASH) INSTALL
rm -rf INSTALL $(HASH)
uj5u.com熱心網友回復:
擴展的 glob 語法特定于 Bash。如果您愿意SHELL=/bin/bash在 Makefile 中進行硬編碼(最初發布問題時沒有提到這一點),您仍然可以使用此語法(盡管您可能應該單獨驗證是否使用 啟用了擴展通配符語法shopt -s extglob)。
對于便攜式解決方案,可能只需回圈遍歷物件:
$(HASH):
mkdir -p $(HASH)
for f in *; do \
case $$f in $(HASH)) continue;; esac; \
cp -r "$$f" $(HASH); \
done
(為了健壯性,您可能應該創建一個臨時目錄,并且只有在正確填充時才將其移動到最終目的地,但這留作練習。)
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/399217.html
上一篇:如何獲取根元素包含特定字符
