2

我在脚本中有这一行:

readarray -t vCollection < <(cut -d, -f2 $1)

在我的电脑上一切正常,当我将脚本移动到服务器时,会引发语法错误:

AddACE_Nexus.sh: line 87: syntax error near unexpected token `<'
AddACE_Nexus.sh: line 87: `readarray -t vCollection < <(cut -d, -f2 $1)'

在服务器上,bash 版本是 3.2.51(1)-release (x86_64-suse-linux-gnu)

我评论了 <<(cut -d, -f2 $1) 部分,然后没有发现错误

如何更新我的语法以使脚本在服务器上像在我的 PC 上一样工作?

提前致谢!

4

1 回答 1

2

您应该使用 bash 运行脚本,

bash script.sh

或者为您的脚本使用适当的标题。

#!/bin/bash
...

普通 shell 不支持进程替换 ( <())。并且bash如果调用 assh将自身设置为不支持该功能的 POSIX 兼容模式。

另一个解决方案也是在脚本上显式禁用 POSIX 模式,以防万一sh实际上bash也是如此,但只是指向它的链接。

#!/bin/bash
set +o posix
...

sh如果脚本仍然以某种方式调用,即使标题已经存在,这将很有帮助,例如sh script.sh.

于 2013-09-19T17:16:13.467 回答