在/var/www/html
我执行以下cat
作为制造商的 heredocument 时- 它制作了/opt/dwa.sh
包含函数和 MYSQL heredocument 的文件。
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
heredocument maker,但现在,改为在内部获取此内容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
heredocument,但仍然出现相同的结果。鉴于cat
由于双引号(“EOT”),heredocument 不允许变量扩展,我对此感到更加奇怪。
我对 Bash 很陌生,并且没有太多使用变量的经验(从来没有真正成为我所学课程的一部分)。也许你可以建议。
更新---我在不了解如何解决问题的情况下:
在控制台中执行后exec bash
,我尝试重复运行的常规模式,DWA_INSTALL
这一次文件的创建没有html/example.com
. 我不知道为什么,但它有帮助。
我在不了解如何解决问题的情况下解决了问题:
为了清除所有非环境变量(即我自己声明的所有变量),我在控制台中运行:
我试图重复常规的运行模式,
DWA_INSTALL
这一次文件的创建没有html/example.com
预备问题。我不知道为什么,但它有帮助;如果您知道那里发生了什么,请编辑此答案并提供解释。