【发布时间】:2016-12-04 09:19:48
【问题描述】:
我有一个 bash 脚本,在 RHEL 或 OS X 上运行时,会出现以下错误:
第 62484 行:意外标记 `newline' 附近的语法错误
第 62484 行:`-o_gz'
这是一个自动生成的脚本,用于解决我公司使用的 Grid Engine 计算集群引入的限制。它全部由一堆几乎相同的if/elif 组成。我看不到错误所在行有什么特别之处。当我在错误行之前运行脚本的开头部分时,它可以正常工作。这让我觉得可能存在一些 bash 脚本长度限制。我在网上能找到的唯一参考资料是comment by iAdjunct。
围绕错误的脚本部分如下所示(经过一些简化):
.
.
.
.
elif [ $task_number -eq 2499 ]
then
/some/tool/executable \
-use_prephased_g \
-m \
/some/text/file \
-h \
/some/zipped/file \
-l \
-int \
45063854 \
46063853 \
-Ne \
20000 \
-o \
/some/output/file \
-verbose \
-o_gz #==============> ****THIS IS LINE 62484****
elif [ $task_number -eq 2500 ]
then
/some/tool/executable \
-use_prephased_g \
-m \
/some/other/text/file \
-h \
/some/other/zipped/file \
-l \
-int \
98232182 \
99232182 \
-Ne \
20000 \
-o \
/some/other/output/file \
-verbose \
-o_gz
elif [ $task_number -eq 2501 ]
.
.
.
.
这会给任何人敲响警钟吗?
【问题讨论】:
-
如果
elifs之间的唯一区别是$task_number和三个-int和-Ne数字,以及-m和-h文件名,那么它实际上是一个输入一个变量并返回三个数字和两个文件名的函数。将所有四个数字和两个文件名放在一个表或数组中会更简单,创建一个函数来返回所需的条件输出,然后脚本不需要 anyifs 或 @ 987654329@s —— 一个函数调用将完成数千个elifs 的工作。
标签: bash shell scripting rhel6