EOF 行的问题在哪里?
Where´s the Issue with the EOF line?
我已从 SuSE 更改为 RHEL 并尝试使用相同的代码,我相信我遇到了一些与身份相关的错误。 SuSE 使用的是 bash3,而 RHEL 使用的是 bash4。
错误信息:
-bash: test.sh: line 9: unexpected EOF while looking for matching `)'
-bash: test.sh: line 21: syntax error: unexpected end of file
当我改变时:
EOF)
为此(删除选项卡):
EOF)
工作正常。我了解这个问题,但我想了解为什么它在 SuSE 和 RHEL 上运行良好,但在 RHEL 上却不行。关键是在代码中更改它会花费很多时间和工作,所以有什么方法可以使用 unix 会话或一些配置来解决这个问题?
#!/bin/bash
result=$(sqlplus -S /nolog << EOF
WHENEVER SQLERROR EXIT SQL.SQLCODE;
Connect $ORACLE_USER/$(sh /bin/encrypt.sh -d "$ORACLE_PASS")@${HOST}:${PORT}/${HOST}
set heading off
set line 1000
$QUERY;
EXIT;
EOF)
result=$(echo $result | tail --lines=1)
echo $result
return $result
}
如果要缩进 here-doc 分隔符,应将 <<
更改为 <<-
。您必须使用制表符来缩进代码,空格不起作用。请注意 )
不遵循 EOF
;那是因为 bash 否则无法关闭 $()
。
VAL=$(cat <<-EOF
derp
EOF
)
echo "$VAL"
exit 0
我已从 SuSE 更改为 RHEL 并尝试使用相同的代码,我相信我遇到了一些与身份相关的错误。 SuSE 使用的是 bash3,而 RHEL 使用的是 bash4。
错误信息:
-bash: test.sh: line 9: unexpected EOF while looking for matching `)'
-bash: test.sh: line 21: syntax error: unexpected end of file
当我改变时:
EOF)
为此(删除选项卡):
EOF)
工作正常。我了解这个问题,但我想了解为什么它在 SuSE 和 RHEL 上运行良好,但在 RHEL 上却不行。关键是在代码中更改它会花费很多时间和工作,所以有什么方法可以使用 unix 会话或一些配置来解决这个问题?
#!/bin/bash
result=$(sqlplus -S /nolog << EOF
WHENEVER SQLERROR EXIT SQL.SQLCODE;
Connect $ORACLE_USER/$(sh /bin/encrypt.sh -d "$ORACLE_PASS")@${HOST}:${PORT}/${HOST}
set heading off
set line 1000
$QUERY;
EXIT;
EOF)
result=$(echo $result | tail --lines=1)
echo $result
return $result
}
如果要缩进 here-doc 分隔符,应将 <<
更改为 <<-
。您必须使用制表符来缩进代码,空格不起作用。请注意 )
不遵循 EOF
;那是因为 bash 否则无法关闭 $()
。
VAL=$(cat <<-EOF
derp
EOF
)
echo "$VAL"
exit 0