I am trying to use a HERE document in a docker script file to generate a text file but must be doing something wrong since I get a warning message that I did not expect: EOF: line 6: warning: here-document at line 0 delimited by end-of-file (wanted `EOF') This is the sample script I am testing in my docker file: RUN bash -c "$(/bin/echo -e "cat << 'EOF' | tee -a /test.txt \ ??? \n<test> \ ??? \n? someting here \ ??? \n? something else here \ ??? \n</test>")" \ EOF Can anyone see what is wrong in the above statement? Thanks.
On Tue, Apr 30, 2019 at 4:44 AM H <agents at meddatainc.com> wrote:> I am trying to use a HERE document in a docker script file to generate a > text file but must be doing something wrong since I get a warning message > that I did not expect: > > EOF: line 6: warning: here-document at line 0 delimited by end-of-file > (wanted `EOF') > > This is the sample script I am testing in my docker file: > > RUN bash -c "$(/bin/echo -e "cat << 'EOF' | tee -a /test.txt \ > \n<test> \ > \n someting here \ > \n something else here \ > \n</test>")" \ > EOF > > Can anyone see what is wrong in the above statement? > > Thanks. > > >The second EOF should be before the part ")" \ and not after, because it has to represent the closure of the first one above.... So it should be something like this (I have put /tmp/test.txt as I tested as non root user that cannot write into /) bash -c "$(/bin/echo -e "cat <<EOF | tee -a /tmp/test.txt \ \n<test> \ \n something here \ \n</test> EOF ")" I also removed the single apex from the first 'EOF'. I get: [g.cecchi at ope46 ~]$ ll /tmp/test.txt ls: cannot access '/tmp/test.txt': No such file or directory [g.cecchi at ope46 ~]$ bash -c "$(/bin/echo -e "cat <<EOF | tee -a /tmp/test.txt \> \n<test> \ > \n something here \ > \n</test> > EOF > ")"<test> something here </test> [g.cecchi at ope46 ~]$ cat /tmp/test.txt <test> something here </test> [g.cecchi at ope46 ~]$ HIH, Gianluca
> > EOF: line 6: warning: here-document at line 0 delimited by end-of-file > > (wanted `EOF') > > > > This is the sample script I am testing in my docker file: > > > > RUN bash -c "$(/bin/echo -e "cat << 'EOF' | tee -a /test.txt \ > > \n<test> \ > > \n someting here \ > > \n something else here \ > > \n</test>")" \ > > EOF > > > > Can anyone see what is wrong in the above statement? > > > > Thanks. > > > > > > > The second EOF should be before the part ")" \ and not after, because it > has to represent the closure of the first one above.... > > So it should be something like this (I have put /tmp/test.txt as I tested > as non root user that cannot write into /) > > bash -c "$(/bin/echo -e "cat <<EOF | tee -a /tmp/test.txt \ > \n<test> \ > \n something here \ > \n</test> > EOF > ")"It is also necessary to have the closing here document delimiter on a line on its own, as you have done, but the OP hadn't. In all these things it's often useful to remove the escaped new lines. The OPs original command would been something like: bash -c "$(/bin/echo -e "cat << 'EOF' | tee -a /test.txt \n<test> \n someting here \n something else here \n</test>")" EOF It's obvious from this that the "EOF" isn't on a line on its own and is in the wrong place compared to the parenthesis. P.
On 04/30/2019 02:54 AM, Gianluca Cecchi wrote:> On Tue, Apr 30, 2019 at 4:44 AM H <agents at meddatainc.com> wrote: > >> I am trying to use a HERE document in a docker script file to generate a >> text file but must be doing something wrong since I get a warning message >> that I did not expect: >> >> EOF: line 6: warning: here-document at line 0 delimited by end-of-file >> (wanted `EOF') >> >> This is the sample script I am testing in my docker file: >> >> RUN bash -c "$(/bin/echo -e "cat << 'EOF' | tee -a /test.txt \ >> \n<test> \ >> \n someting here \ >> \n something else here \ >> \n</test>")" \ >> EOF >> >> Can anyone see what is wrong in the above statement? >> >> Thanks. >> >> >> > The second EOF should be before the part ")" \ and not after, because it > has to represent the closure of the first one above.... > > So it should be something like this (I have put /tmp/test.txt as I tested > as non root user that cannot write into /) > > bash -c "$(/bin/echo -e "cat <<EOF | tee -a /tmp/test.txt \ > \n<test> \ > \n something here \ > \n</test> > EOF > ")" > > I also removed the single apex from the first 'EOF'. > > I get: > > [g.cecchi at ope46 ~]$ ll /tmp/test.txt > ls: cannot access '/tmp/test.txt': No such file or directory > > [g.cecchi at ope46 ~]$ bash -c "$(/bin/echo -e "cat <<EOF | tee -a > /tmp/test.txt \ >> \n<test> \ >> \n something here \ >> \n</test> >> EOF >> ")" > <test> > something here > </test> > > [g.cecchi at ope46 ~]$ cat /tmp/test.txt > <test> > something here > </test> > [g.cecchi at ope46 ~]$ > > > HIH, > Gianluca > _______________________________________________ > CentOS mailing list > CentOS at centos.org > https://lists.centos.org/mailman/listinfo/centosThank you but in the docker script (running under Centos 7), I get error messages unless I add \ as below. However, the below script still results in an error message: RUN bash -c "$(/bin/echo -e "cat <<EOF | tee -a /tmp/test.txt \ \n<test> \ \n something here \ \n</test> \ EOF \ ")" bash: line 13: warning: here-document at line 0 delimited by end-of-file (wanted `EOF') It looks like I need to make some additional changes when it is used in a docker script?