Variable

變數值通過heredoc執行列印

  • December 3, 2017

/var/www/html我執行以下cat作為製造商的 heredocument 時- 它製作了/opt/dwa.sh包含函式和 MYSQL heredocument 的文件。

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

我的問題

出於測試目的,我然後重新執行了catheredocument maker,但現在,改為在內部獲取此內容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=''再次執行並重新執行catheredocument,但仍然出現相同的結果。鑑於cat由於雙引號(“EOT”),heredocument 不允許變數擴展,我對此感到更加奇怪。

我對 Bash 很陌生,並且沒有太多使用變數的經驗(從來沒有真正成為我所學課程的一部分)。也許你可以建議。

更新—我在不了解如何解決問題的情況下:

在控制台中執行後exec bash,我嘗試重複執行的正常模式,DWA_INSTALL這一次文件的創建沒有html/example.com. 我不知道為什麼,但它有幫助。

我在不了解如何解決問題的情況下解決了問題:

為了清除所有非環境變數(即我自己聲明的所有變數),我在控制台中執行:

exec bash

我試圖重複正常的執行模式,DWA_INSTALL這一次文件的創建沒有html/example.com預備問題。

我不知道為什麼,但它有幫助;如果您知道那裡發生了什麼,請編輯此答案並提供解釋。

引用自:https://unix.stackexchange.com/questions/408476