切换到其他用户后,我有一些命令要运行。我需要在构建xml文件中执行此操作。
以下是我所做的 -
<exec command="sudo su auto_deploy << EOF
echo 'Logged in user'
whoami
EOF" dir="${dir.scratchpad}" />
我使用了XML转义,即<
<
。
但是,我收到以下错误 -
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 << EOF${line.separator}echo 'Logged in user'${line.separator}whoami${line.separator}EOF" dir="${dir.scratchpad}" />
但它仍然会抛出同样的错误。不知道我错过了什么。
答案 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 <<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 <<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