bash脚本中临时未命名管道的问题

时间:2010-02-11 13:13:24

标签: bash pipe

我有以下问题:

当我在终端窗口中直接执行以下脚本时,命令按预期运行。

$ diff <(echo tmp) <(echo tmp1)
1c1
< tmp
---
> tmp1

但是当我在shell脚本中编写相同的命令时

#! /bin/bash
diff <(echo tmp) <(echo tmp1)

我收到以下错误消息:

$ sh test.sh
test.sh: line 2: syntax error near unexpected token `('
test.sh: line 2: ` diff <(echo tmp) <(echo tmp1)'

最初我认为这是diff的一个问题,但这也适用于其他命令。有没有人知道导致问题的原因是什么?

3 个答案:

答案 0 :(得分:5)

尝试

bash test.sh

chmod ugo+x test.sh
./test.sh

当我这样做时,对我来说很好。

看起来bourne shell(sh)不支持该语法。

答案 1 :(得分:1)

使用sh调用bash时,它会以特殊的POSIX兼容模式启动。这有不同的语法,我想解释不同的结果。

请参阅bashref of POSIX mode,#22:“流程替换不可用”。

答案 2 :(得分:0)

这种语法看起来并不熟悉。你确定你在终端使用bash吗?您可以输入echo $SHELL

进行验证