Cat
cat heredocument 複製了除函式呼叫之外的所有內容
我在 Ubuntu 16.04 環境中的 Bash 控制台中執行了以下程式碼:
cat <<-'DWA' > /opt/dwa.sh DWA() { test='test' read domain find /var/www/html/ -exec cp /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 -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
除了最後一行中的程式碼(最後一行
DWA
用作函式呼叫)之外,一切都按照我的意願進行了重定向。為什麼除了最後一個
DWA
函式呼叫之外的所有內容都被複製而只有這個流沒有被複製?也許與上一個之前的有些衝突
DWA
?
最後一個
DWA
被刪除,因為您將其用作分隔符。分隔符告訴你的 shell 這些匹配字元串之間的所有內容都是我的 here doc 的一部分。分隔符不是文件的一部分,因此在讀取此處的文件時會被剝離。保留之前的原因DWA
是因為分隔符必須位於行首。我通常看到人們使用EOF
orEOL
但這個字元串可以是任何你想要的,只要它是唯一的並且不會出現在你的文件中。我建議修改為:
cat <<-'EOF' > /opt/dwa.sh #!/bin/bash DWA() { test='test' read domain find /var/www/html/${domain} -exec cp /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 -u root -p << MYSQL create user '${test}'@'localhost' identified by '${psw}'; create database ${test}; GRANT ALL PRIVILEGES ON ${test}.* TO ${test}@localhost; MYSQL } DWA EOF
如果您確實希望這些變數在發送給您之前擴展,
dwa.sh
您應該取消引用EOF
我發現此頁面是此處文件的非常簡潔的資源:http: //tldp.org/LDP/abs/html/here-docs.html