Cannot use process substitution during docker build because bash goes into posix mode
In a Dockerfile, I want to use process substitution:
RUN echo <(echo '$DATA:'"$DATA")
/bin/sh: -c: line 0: syntax error near unexpected token `('
I tried switching off POSIX mode:
RUN set +o posix && echo <(echo '$DATA:'"$DATA")
But it seems the syntax error happens even before the first command is run. Same if I replace
Note that the command (even the one that I used as a simplified example here) contains both single and double quotes, so I can’t simply prepend
The used shell is actually a bash, but it is invoked as
/bin/sh by docker:
Step 7 : RUN ls -l /bin/sh ---> Running in 93a9809e12a7 lrwxrwxrwx 1 root root 9 Dec 28 03:38 /bin/sh -> /bin/bash
One Solution collect form web for “Cannot use process substitution during docker build because bash goes into posix mode”
sh is not
bash, you can’t use process substitution in
shell mode directly; you need to spawn a
bash session (non-login, non-interactive here):
RUN [ "/bin/bash", "-c", "echo <(echo '$DATA:'\"$DATA\")" ]
Here i have used the
exec) form to make sure the quotes are easily managed, here you just need to escape quotes around
\"$DATA\" — to prevent
json interpretation beforehand.
sh is in fact
bash, this should do:
RUN "echo <(echo '$DATA:'"$DATA")"
Also this just outputs the file descriptor, i am not rally sure about your plan.