2015-10-14 61 views
1

我想要創建一個用python代碼創建壓縮文件的單線程。但是,當我在Makefile中運行它時,它使用默認的shell(破折號)。是運行echo並將其重定向到帶有破折號外殼的貓

bash$ dash 
dash$ zip --exclude '.git/*' --exclude '*.swp' --exclude '*.pyc' --exclude 'tool' --exclude Makefile -r - . | cat <(echo '#!/usr/bin/env python') - > externaltool 
dash: 1: Syntax error: "(" unexpected 
dash$ exit 

但在bash它工作得很好

bash$ zip --exclude '.git/*' --exclude '*.swp' --exclude '*.pyc' --exclude 'externaltool' --exclude Makefile -r - . | cat <(echo '#!/usr/bin/env python') - > externaltool 
    adding: common/ (stored 0%) 
    adding: common/config.py (deflated 19%) 
    adding: common/cmdwrap.py (deflated 65%) 
    adding: common/extconfig.py (deflated 71%) 
    adding: common/commands.py (deflated 19%) 
    adding: common/__init__.py (stored 0%) 
    adding: __main__.py (deflated 45%) 

是否有表達貓<任何方法(回聲 '#在/ usr /斌/包膜蟒蛇!') -在破折號?

我知道我可以添加到Makefile文件

SHELL := /bin/bash 

但它僅僅是解決方法,而不是pernament解決方案。

+0

這是什麼了使用bash呢? – 123

回答

3

號碼破折號不支持process substitution

但是,這也是一種相當奇怪的方式來做你想在那裏。

簡單(破折號兼容,除非我大錯特錯)方法有兩個:

{ echo '#!/usr/bin/env python'; zip --exclude '.git/*' --exclude '*.swp' --exclude '*.pyc' --exclude 'tool' --exclude Makefile -r - .; } > externaltool 

echo '#!/usr/bin/env python' > externaltool 
zip --exclude '.git/*' --exclude '*.swp' --exclude '*.pyc' --exclude 'tool' --exclude Makefile -r - . >> externaltool`