/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
。
我不知道为什么,但它有帮助;如果您知道那里发生了什么,请编辑此答案并提供解释。