![heredocを使用して変数値を印刷する[閉じる]](https://linux33.com/image/122903/heredoc%E3%82%92%E4%BD%BF%E7%94%A8%E3%81%97%E3%81%A6%E5%A4%89%E6%95%B0%E5%80%A4%E3%82%92%E5%8D%B0%E5%88%B7%E3%81%99%E3%82%8B%5B%E9%96%89%E3%81%98%E3%82%8B%5D.png)
/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
。
理由はわかりませんが、役に立ちます。何が起こっているのかを知っている場合は、この回答を編集して説明を提供してください。