O valor da variável é impresso com a execução heredoc [closed]

1

Enquanto em /var/www/html eu executei o seguinte cat heredocument que serve como um criador - Faz o arquivo /opt/dwa.sh que inclui uma função e um documento MYSQL.

cat <<-"DWA_INSTALL" > /opt/dwa.sh
    #!/bin/bash
    DWA() {
        test='test'

        read domain
        cp -rv /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 --force -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_INSTALL

Depois de executar o arquivo, executei o próprio arquivo que contém a função, passando um argumento ${domain} para read .

Vamos supor que esse argumento seja:

example.com

Meu problema

Para fins de teste, eu re-executei o criador cat heredocument, mas agora, em vez disso, obtive esse conteúdo dentro de dwa.sh :

#!/bin/bash
    DWA() {
        test='test'

        read domain
        cp -rv /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 --force -u root -p <<-MYSQL
            CREATE user '${test}'@'localhost' IDENTIFIED BY '${psw}';
            CREATE database ${test};
            GRANT ALL PRIVILEGES ON ${test}.* TO ${test}@localhost;
        MYSQL
    }
DWA

Eu tenho isso, dentro dele:

    html/example.com/#!/bin/bash
    html/example.com/html/example.com/DWA() {
        html/example.com/test='test'
        html/example.com/
        html/example.com/read domain
        html/example.com/cp -rv /var/www/html/${domain} /var/www/html/${test}
        html/example.com/sed -i 's/${domain}/${test}'/g /var/www/html/test/wp-config.php
        html/example.com/sed -i 's/${domain}/${test}'/g /var/www/html/test/wp-config.php
        html/example.com/mysql --force -u root -p <<-MYSQL
            html/example.com/CREATE user '${test}'@'localhost' IDENTIFIED BY '${psw}';
            html/example.com/CREATE database ${test};
            html/example.com/GRANT ALL PRIVILEGES ON ${test}.* TO ${test}@localhost;
        html/example.com/MYSQL
    html/example.com/}
html/example.com/DWA

Minha pergunta

De onde vêm essas sequências de html/example.com ? Eu tenho a sensação de que tem a ver com read de alguma forma, como se o valor de alguma variável estivesse "preso" na memória, mas eu não sei como rastrear a variável pelo seu valor e não tenho idéia de como encontrar a fonte dessas strings.

Eu tentei executar domain='' e executar novamente o cat heredocument novamente, mas o mesmo resultado é exibido. Dado o cat heredocument não permite expansão de variável devido a aspas duplas ("EOT"), eu me sinto ainda mais estranho com isso.

Sou muito novo no Bash e não tenho muita experiência em trabalhar com variáveis (nunca fiz parte dos cursos que fiz). Talvez você possa aconselhar.

Atualização --- resolvi o problema sem entender como:

Após a execução no console exec bash , tentei repetir o padrão regular de execução DWA_INSTALL e, desta vez, o arquivo foi criado sem o problema do html/example.com . Eu não sei porque, mas ajudou.

    
por Arcticooling 03.12.2017 / 03:13

1 resposta

0

Eu resolvi o problema sem entender como:

Para limpar todas as variáveis não-ambientais (isto é, todas as variáveis que eu mesmo declarei), eu corri no console:

exec bash

Eu tentei repetir o padrão regular de execução DWA_INSTALL e desta vez o arquivo foi criado sem o problema das html/example.com preliminares.

Eu não sei porque, mas ajudou; Por favor, edite esta resposta com uma explicação se você descobriu o que aconteceu lá.

    
por 03.12.2017 / 20:50