Eu tenho um script bash projetado para gerar outro script bash. estou usando cat
. Desejo avaliar algumas das expressões no script de saída, mas não outras.
PROJECT=myproject
cat << EOF > create_dir.sh
#!/usr/bin/env bash
DATE=`date '+%y%m%d-%H%M'`
mkdir $PROJECT/\$DATE
EOF
O arquivo resultante create_dir.sh
se parece com isso:
#!/usr/bin/env bash
DATE=171123-1834
mkdir myproject/$DATE
O resultado que eu quero é esse:
#!/usr/bin/env bash
DATE=`date '+%y%m%d-%H%M'`
mkdir myproject/$DATE
Como posso modificar este script para que a expressão a seguir DATE=
não seja avaliada e, ao mesmo tempo, garantir que $PROJECT
seja avaliada?
Você precisa escapar dos símbolos '`', pois eles significam "executar este código". Então essa linha deve ficar assim:
cat << \EOF
Se o rótulo for citado, o documento aqui será considerado como está. Ou então cite as aspas no documento aqui.
A parte relevante da página de manual é:
Observe que esta solução copiará o documento aqui textualmente; para fazer algumas ampliações e outras não a única solução é usar
\
para cotar aquelas construções que não serão ampliadas.