Cat

cat heredocument 複製了除函式呼叫之外的所有內容

  • December 1, 2017

我在 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是因為分隔符必須位於行首。我通常看到人們使用EOForEOL但這個字元串可以是任何你想要的,只要它是唯一的並且不會出現在你的文件中。

我建議修改為:

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

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