heredocを使用して変数値を印刷する[閉じる]

heredocを使用して変数値を印刷する[閉じる]

/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

理由はわかりませんが、役に立ちます。何が起こっているのかを知っている場合は、この回答を編集して説明を提供してください。

おすすめ記事