尝试在进程替换中调用函数时出错。 有没有办法做到这一点?
#!/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。
答案 0 :(得分:3)
这里没问题:
$ chmod +x test.sh
$ ./test.sh
清除差异。没问题!
$ bash -x ./test.sh
+ diff /dev/fd/63 /dev/fd/62
++ testfunc
++ echo bork
++ echo bork
证明它有效
也许你
/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:
- 无法使用流程替换。
醇>
在Mac OS X 10.10.5(Yosemite)上测试。