使用heredoc执行打印变量值

使用heredoc执行打印变量值

/var/www/html在我执行以下heredocument时cat,它作为制作者/opt/dwa.sh- 它创建包含函数和 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

在执行文件后,我执行了包含该函数的文件本身,并将参数传递${domain}read.

让我们假设这个论点是:

example.com

我的问题

出于测试目的,我然后重新执行了此处cat文档生成器,但现在,改为将以下内容放入其中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

我得到了这个,里面有:

    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

我的问题

这些html/example.com字符串从哪里来?我有一种感觉,它与某种方式有关read,就像某些变量的值“卡在”内存中一样,但我不知道如何通过变量的值来追踪变量,也不知道如何找出来源这些字符串。

我尝试再次执行domain=''并重新执行cat此处文档,但仍然出现相同的结果。鉴于cat此处文档不允许由于双引号(“EOT”)而不允许变量扩展,我对此感到更奇怪。

我对 Bash 很陌生,没有太多使用变量的经验(从来没有真正成为我所修课程的一部分)。也许你可以提供建议。

更新---我解决了这个问题,但不明白如何:

在控制台中执行后exec bash,我尝试重复常规的运行模式DWA_INSTALL,这次创建的文件没有出现html/example.com.我不知道为什么,但它有帮助。

答案1

我在不明白如何的情况下解决了这个问题:

为了清除所有非环境变量(即我自己声明的所有变量),我在控制台中运行:

exec bash

我尝试重复常规的运行模式DWA_INSTALL,这次创建的文件没有出现预备问题html/example.com

我不知道为什么,但它有帮助;如果您知道那里发生了什么,请编辑此答案并提供解释。

相关内容