Tente envolver a variável entre aspas duplas.
Exemplo: echo "$COMMANDS_CODE"
Você pode aprender mais sobre variáveis shell e aspas aqui , na seção "A importância das aspas".
Meu script é assim:
#!/bin/sh
PROJECT_DIR=$(cd -P -- "$(dirname -- "$0")" && pwd -P)
COMMANDS_CODE=$(php $PROJECT_DIR/bin/console generate:code)
echo $COMMANDS_CODE
A saída tem todas as novas linhas removidas (o que não acontece se eu chamar o script diretamente) e contém alguns caminhos estranhos no começo assim:
/bin /boot /cdrom /dev /etc /home
/initrd.img /lib /lib64 /lost+found
/media /mnt /opt /proc /root /sbin
/selinux /srv /sys /tmp /usr /var /vmlinuz
... here starts the actual output but without any newlines ...
(O texto acima é uma string longa que é ecoada. Acabei de adicionar algumas novas linhas para legibilidade)
O que está acontecendo lá?
Se eu fizer um
php bin/console generate:code
no diretório do meu projeto no meu bash shell, tudo funciona bem.
Tente envolver a variável entre aspas duplas.
Exemplo: echo "$COMMANDS_CODE"
Você pode aprender mais sobre variáveis shell e aspas aqui , na seção "A importância das aspas".
Tags shell-script