bash脚本中临时未命名管道的问题
我有以下问题: 当我在终端窗口中直接执行以下脚本时,命令的行为与预期一致bash脚本中临时未命名管道的问题,bash,pipe,Bash,Pipe,我有以下问题: 当我在终端窗口中直接执行以下脚本时,命令的行为与预期一致 $ diff <(echo tmp) <(echo tmp1) 1c1 < tmp --- > tmp1 $diff试试看 或 当我这样做的时候,对我来说都很好 bourne shell(sh)似乎不支持该语法。该语法看起来并不熟悉。您确定正在终端中使用bash吗?当使用sh调用bash时,您可以通过键入echo$SHELL来验证它是否以一种特殊的POSIX兼容模式启动。这有不同的语法,我想这解释
$ diff <(echo tmp) <(echo tmp1)
1c1
< tmp
---
> tmp1
$diff试试看
或
当我这样做的时候,对我来说都很好
bourne shell(sh)似乎不支持该语法。该语法看起来并不熟悉。您确定正在终端中使用bash吗?当使用sh
调用bash时,您可以通过键入echo$SHELL
来验证它是否以一种特殊的POSIX兼容模式启动。这有不同的语法,我想这解释了不同的结果
请参阅,#22:“进程替换不可用”。我在osx上的bash上按照qn工作,在debian上的bash失败,都是2.05b.0(1)版本。谢谢,我没有想到bash和bourne之间的区别。这就解决了问题@如果你的问题解决了,请考虑接受CodAddit的回答。答案的分数下面有一个勾选框,你可以点击来完成。谢谢你的澄清,我想#/脚本开头的bin/bash就足够了。@sugo:shebang在指定解释器时被覆盖。除非sh
符号链接到Bash
,否则它不一定在POSIX模式下运行Bash。所以它实际上是在使用sh
在您的系统上表示的任何内容。一种方法是创建一个由名为“showshell”的ls-l/proc/$$/exe组成的文件,并使用sh./showshell
和bash./showshell
运行它,您将看到符号链接。在我的系统上,sh
是/bin/dash
。
#! /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)'
bash test.sh
chmod ugo+x test.sh
./test.sh