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
区切り文字として使用されるため削除されます。区切り文字は、一致する文字列間のすべての内容が私のここのドキュメントの一部であることをシェルに伝えます。区切り文字は文書の一部ではないため、ここから文書を読み取ると削除されます。 beforeを維持する理由はDWA
、区切り文字が行の先頭になければならないからです。私は一般に人々がEOF
orを使用しているのを見ますが、EOL
この文字列は一意で文書に表示されない限り、あなたが望む文字列にすることができます。
次のように変更することをお勧めします。
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