我在 Ubuntu 16.04 环境中的 Bash 控制台中执行了以下代码:
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
除了最后一行中的代码(最后一行DWA
用作函数调用)之外,所有内容都按照我的需要进行了重定向。
为什么除了最后一个DWA
函数调用之外的所有内容都被复制,但只有这个流没有被复制?
DWA
也许与上一篇之前有一些冲突?
答案1
最后一个DWA
被删除,因为您使用它作为分隔符。分隔符告诉您的 shell 这些匹配字符串之间的所有内容都是我的此处文档的一部分。分隔符不是文档的一部分,因此在读取此处的文档时会被删除。保留之前的原因DWA
是因为分隔符必须位于行的开头。我通常看到人们使用EOF
orEOL
但这个字符串可以是您想要的任何字符串,只要它是唯一的并且不会出现在您的文档中即可。
我建议修改为:
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
如果您确实希望这些变量在发送给您之前扩展,dwa.sh
您应该取消引用EOF
我发现此页面是此处文档的非常简洁的资源: http://tldp.org/LDP/abs/html/here-docs.html