Variable
變數值通過heredoc執行列印
在
/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
我的問題
出於測試目的,我然後重新執行了
cat
heredocument 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=''
再次執行並重新執行cat
heredocument,但仍然出現相同的結果。鑑於cat
由於雙引號(“EOT”),heredocument 不允許變數擴展,我對此感到更加奇怪。我對 Bash 很陌生,並且沒有太多使用變數的經驗(從來沒有真正成為我所學課程的一部分)。也許你可以建議。
更新—我在不了解如何解決問題的情況下:
在控制台中執行後
exec bash
,我嘗試重複執行的正常模式,DWA_INSTALL
這一次文件的創建沒有html/example.com
. 我不知道為什麼,但它有幫助。
我在不了解如何解決問題的情況下解決了問題:
為了清除所有非環境變數(即我自己聲明的所有變數),我在控制台中執行:
exec bash
我試圖重複正常的執行模式,
DWA_INSTALL
這一次文件的創建沒有html/example.com
預備問題。我不知道為什麼,但它有幫助;如果您知道那裡發生了什麼,請編輯此答案並提供解釋。