Tu echo
es uno de los que interpreta backslash -escapa . Un \n
significa una nueva línea, por lo que obtienes exactamente eso. La última barra invertida viene como -, ya que \s
no es un código de escape válido.
Make ejecuta los comandos a través de un shell, usando /bin/sh
por defecto, y en Debian eso es dash. El echo
integrado de Dash procesa las barras invertidas. Bash no. (Y tampoco lo hace el /bin/echo
externo en Debian, no es que importe a menos que ejecute explícitamente/bin/echo
).
Su mejor opción es usar printf
explícitamente, al menos es seguro porque siempre procesa los escapes de barra invertida -. Lo siguiente siempre debe hacer lo mismo, el \\n
al principio produce una barra invertida real y un n
, el \n
luego produce una nueva línea para finalizar la línea.
foo:
printf '\\newcommand\n' > foo
(o, si desea evitar el procesamiento de barras invertidas, utiliceprintf "%s" '\newcommand'
)
Consulte la pregunta ¿Por qué printf es mejor que echo? para obtener más detalles sobre echo
trampas.
Вам необходимо объединить два файла в один блок, прежде чем передать их команде mail
. Нравится,например:
cat /home/directory/file1.txt /home/directory/file2.txt | mail username -s 'MySubject'