我想制作一个用python代码创建压缩文件的单行程序。但是当我在Makefile中运行它时,它使用默认的shell(破折号)。是
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%)
是否有任何方法可以在短划线中表达 cat&lt;(echo&#39;#!/ usr / bin / env python&#39;) - ?
我知道我可以添加到Makefile
SHELL := /bin/bash
但它只是解决方法,而不是pernament解决方案。
答案 0 :(得分:3)
没有。 dash不支持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`