cat heredocument copiou tudo além da chamada de função

1

Eu executei o seguinte código no meu console Bash em um ambiente Ubuntu 16.04:

cat <<-'DWA' > /opt/dwa.sh
    DWA() {
        test='test'
        read domain
        find /var/www/html/ -exec cp /var/www/html/${domain} /var/www/html/${test} {} \;
        sed -i 's/${domain}/${test}'/g /var/www/html/test/wp-config.php
        sed -i 's/${domain}/${test}'/g /var/www/html/test/wp-config.php
        mysql -u root -p << MYSQL
            create user '${test}'@'localhost' identified by '${psw}';
            create database ${test};
            GRANT ALL PRIVILEGES ON ${test}.* TO ${test}@localhost;
        MYSQL
    }
    DWA
DWA

Tudo foi redirecionado como desejei, além do código na última linha (o último DWA que serve como uma chamada de função).

Por que tudo além da última chamada de função DWA foi copiada, mas apenas esse fluxo não foi?

Talvez alguns conflitos com o DWA antes do último?

    
por Arcticooling 01.12.2017 / 22:07

1 resposta

2

O último DWA está sendo removido porque você está usando isso como seu delimitador. Os delimitadores dizem ao seu shell tudo entre essas strings correspondentes faz parte do meu doc aqui. Os delimitadores não fazem parte do documento e, portanto, são removidos quando o documento aqui é lido. A razão pela qual o DWA anterior permaneceu é porque o delimitador deve estar no início da linha. Normalmente, vejo as pessoas usarem EOF ou EOL , mas essa sequência pode ser o que você quiser, desde que seja única e não apareça em seu documento.

Eu recomendo modificar isso:

cat <<-'EOF' > /opt/dwa.sh
    #!/bin/bash
    DWA() {
        test='test'
        read domain
        find /var/www/html/${domain} -exec cp /var/www/html/${domain} /var/www/html/${test} {} \;

        sed -i 's/${domain}/${test}'/g /var/www/html/test/wp-config.php
        sed -i 's/${domain}/${test}'/g /var/www/html/test/wp-config.php

        mysql -u root -p << MYSQL
            create user '${test}'@'localhost' identified by '${psw}';
            create database ${test};
            GRANT ALL PRIVILEGES ON ${test}.* TO ${test}@localhost;
        MYSQL
    }
    DWA
EOF

Se você quiser que essas variáveis sejam expandidas antes de serem enviadas para dwa.sh , você deve desmarcar EOF

Acho essa página um recurso muito conciso para os documentos aqui: link

    
por 01.12.2017 / 22:30