/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
まだ同じ結果です。ここにあるドキュメントで二重引用符(「EOT」)が変数の拡張を許可しないことを考慮すると、cat
これはさらに奇妙だと思います。
私はBashに初めて触れていて、変数を使った経験はあまりありません(私が受講したコースに実際に参加したことはありません)。たぶんあなたはアドバイスを提供することができます。
更新---問題を解決しましたが、方法を理解していません。
コンソールで実行した後、exec bash
通常の実行モードを繰り返してみましたが、DWA_INSTALL
今回は生成されたファイルは表示されませんでしたhtml/example.com
。理由はわかりませんが役に立ちました。
ベストアンサー1
私は次の方法を理解していないままこの問題を解決しました。
環境以外のすべての変数(つまり、直接宣言したすべての変数)を消去するには、コンソールで次を実行します。
exec bash
通常の実行モードを繰り返してみましたが、DWA_INSTALL
今回は準備の問題なくファイルが作成されましたhtml/example.com
。
理由はわかりませんが、役に立ちます。何が起こっているのかを知っている場合は、この回答を編集して説明を提供してください。