1

我想要使​​用 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 <(echo '#!/usr/bin/env python') - in dash ?

我知道我可以添加到 Makefile

SHELL := /bin/bash

但这只是解决方法,而不是永久解决方案。

4

1 回答 1

3

不,dash 不支持进程替换

但这也是一种相当奇怪的方式来做你想做的事。

两种更简单的(和破折号兼容,除非我严重错了)方法是:

{ 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`
于 2015-10-14T13:19:38.627 回答