无法使用此处 - 由EOF在XML格式

时间:2016-08-19 12:45:54

标签: xml bash heredoc phing

切换到其他用户后,我有一些命令要运行。我需要在构建xml文件中执行此操作。

以下是我所做的 -

<exec command="sudo su auto_deploy &lt;&lt; EOF
echo 'Logged in user'
whoami
EOF" dir="${dir.scratchpad}" />

我使用了XML转义,即&lt; <

但是,我收到以下错误 -

sh: warning: here-document at line 0 delimited by end-of-file (wanted `EOF')

相关问题 - here-document gives 'unexpected end of file' error

更新

注意 - 我没有在开始EOF之后和结束EOF之前放置任何空格。

更新1

添加了赏金。期待一个精心回答,因为到目前为止,我无法从评论中获得太多意义。请原谅我缺乏知识。

更新2

以防万一不清楚,我正在研究Phing,我上面提到的XML来自Phing允许用户编写的构建xml文件,用于部署相关的东西。

更新3

如@tripleee引用的问题所述,我试过这个 -

  <exec command="sudo su auto_deploy &lt;&lt; EOF${line.separator}echo 'Logged in user'${line.separator}whoami${line.separator}EOF" dir="${dir.scratchpad}" />

但它仍然会抛出同样的错误。不知道我错过了什么。

1 个答案:

答案 0 :(得分:2)

我以前从未使用过phing,但看看文档看起来有几种方法可以解决你的问题。首先,使用-verbose选项,如果您在最终EOF之后添加其他换行符,则原始解决方案可能会正常工作。也就是说,如果我有build.xml

<?xml version="1.0"?>
<project name="chamilo" default="clean" basedir=".">
<target name="test">
<exec command="sudo -u deploy bash &lt;&lt;EOF${line.separator}echo Logged in user;whoami${line.separator}EOF" />
</target>
</project>

我跑phing -verbose test,我明白了:

     [exec] Executing command: sudo -u deploy bash <<EOF
echo Logged in user;whoami
EOF 2>&1
sh: line 2: warning: here-document at line 0 delimited by end-of-file (wanted `EOF')
     [exec] Logged in user
     [exec] deploy
     [exec] bash: line 2: EOF: command not found

查看生成的脚本的最后一行,如下所示:

EOF 2>&1

如果我添加一个额外的换行符,请执行以下操作:

<?xml version="1.0"?>
<project name="chamilo" default="clean" basedir=".">
<target name="test">
<exec command="sudo -u deploy bash &lt;&lt;EOF${line.separator}echo Logged in user;whoami${line.separator}EOF${line.separator}" />
</target>
</project>

然后它正常工作:

     [exec] Executing command: sudo -u deploy bash <<EOF
echo Logged in user;whoami
EOF
 2>&1
     [exec] Logged in user
     [exec] deploy