我在 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
?
最后一个
DWA
被删除,因为您将其用作分隔符。分隔符告诉你的 shell 这些匹配字符串之间的所有内容都是我的 here doc 的一部分。分隔符不是文档的一部分,因此在读取此处的文档时会被剥离。保留之前的原因DWA
是因为分隔符必须位于行首。我通常看到人们使用EOF
orEOL
但这个字符串可以是任何你想要的,只要它是唯一的并且不会出现在你的文档中。我建议修改为:
如果您确实希望这些变量在发送给您之前扩展,
dwa.sh
您应该取消引用EOF
我发现此页面是此处文档的非常简洁的资源:http: //tldp.org/LDP/abs/html/here-docs.html