进程替换中的Bash函数

时间:2015-10-18 18:50:15

标签: bash

尝试在进程替换中调用函数时出错。 有没有办法做到这一点?

#!/bin/bash
function testfunc 
{
   echo "bork"
}

diff <(testfunc) <(echo "bork")

错误是:

bork.sh: line 7: syntax error near unexpected token `('
bork.sh: line 7: `diff <(testfunc) <(echo "bork")'

- Update-- 问题是调用sh bork.sh而不是bash ./bork.sh。故事的道德确保你正在执行哪个shell。

2 个答案:

答案 0 :(得分:3)

这里没问题:

$ chmod  +x test.sh 
$ ./test.sh 

清除差异。没问题!

$ bash -x ./test.sh 
+ diff /dev/fd/63 /dev/fd/62
++ testfunc
++ echo bork
++ echo bork

证明它有效

故障:

也许你

  • 在受限制的shell中运行
  • 你没有/dev/fd可用/正确安装(由于某些安全的chroot监狱?)

答案 1 :(得分:3)

问题可能是您使用sh而不是bash运行命令。

$ cat > xx.sh
#!/bin/bash
function testfunc 
{
   echo "bork"
}

diff <(testfunc) <(echo "bork")
$ sh xx.sh
xx.sh: line 7: syntax error near unexpected token `('
xx.sh: line 7: `diff <(testfunc) <(echo "bork")'
$ bash xx.sh
$

进程替换不能移植到/bin/sh中的shell。请参阅POSIX mode和子弹28:

上的Bash手册
  
      
  1. 无法使用流程替换。
  2.   

在Mac OS X 10.10.5(Yosemite)上测试。