意外令牌附近的语法错误`<'

时间:2016-03-22 01:19:25

标签: bash shell do-while

foo.sh: line 22: syntax error near unexpected token `<'
foo.sh: line 22: `  done < <( sh $inputScriptFile test.txt )'

它返回错误

.video { 
  height: 400px;
  width: 100%;
  display: block;
}

那有什么不对?我从其他问题中解决了从结果中读取行的解决方案

2 个答案:

答案 0 :(得分:5)

您收到错误是因为流程替换<(some command)部分)不是sh中的标准功能(在POSIX中定义),这意味着它可能会对某些功能起作用操作系统,但可能不在其他操作系统或具有不同配置的相同操作系统中。

您澄清说您的脚本顶部有#!/bin/bash,但我猜您仍然通过sh foo.sh运行脚本,因此,#!/bin/bash将被忽略,脚本为由sh解释。

我假设您的默认shell是bash(运行echo $SHELL),因此如果您将脚本粘贴到终端并执行,所有问题都将消失。

====更新====

如果我的假设是正确的,可能的解决方案:

保持#!/bin/bash不变,让您的脚本成为chmod +x foo.sh的可执行文件。然后直接通过./foo.sh

运行它

答案 1 :(得分:0)

找到了另一个解决方案:进程替换不是POSIX兼容功能,并且可能需要启用它,具体取决于您的系统和外壳。

在脚本的循环中 之前使用以下行:

set +o posix

启用它。可能是您的系统根本不支持它,这对您没有帮助。