Eu tenho este heredocument multilinie que desejo traduzir em uma herestring uniline:
cat <<-"PHPCONF" > /etc/php/*/zz_overrides.ini
[PHP]
post_max_size = 200M
upload_max_filesize = 200M
cgi.fix_pathinfo = 0
PHPCONF
O mais próximo que consegui chegar é o seguinte:
cat >"/etc/php/*/zz_overrides.ini" <<< "[PHP] post_max_size = 200M upload_max_filesize = 200M cgi.fix_pathinfo = 0"
mas não acho que as quebras de linha após cada diretiva sejam possíveis, dado que o resultado final é uma string . Talvez haja alguma maneira "não ortodoxa", afinal?
Tanto o heredoc quanto o herestring visam substituir esta operação sed pesada:
sed -i "s/post_max_size = .M/post_max_size = 200M/ ; s/upload_max_filesize = .M/upload_max_filesize = 200M/ ; s/;cgi.fix_pathinfo=1/cgi.fix_pathinfo=0/" /etc/php/*/fpm/php.ini
Deixando de lado o fato de que você poderia apenas
printf "this\nthat\n" > /some/file
, você pode criar uma string here com novas linhas, por exemplo, entre aspas ANSI-C:Além disso, por causa das aspas, isso tentará criar um arquivo em um diretório chamado literalmente
*
:Isso funcionaria no Bash, mas apenas se o glob corresponder a um arquivo (se tiver
/etc/php/foo/zz_overrides.ini
e/etc/php/bar/zz_overrides.ini
, o Bash dá um erro)Acho que
bash
permite que você use uma string com novas linhas diretamente, sem necessidade de um heredoc ou chamando comandos externos (comocat
):