cat heredocument는 함수 호출을 제외한 모든 것을 복사합니다.

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이전글과 충돌이 있는게 아닐까요?

답변1

마지막 항목은 DWA구분 기호로 사용하기 때문에 제거됩니다. 구분 기호는 일치하는 문자열 사이의 모든 내용이 내 여기 문서의 일부임을 쉘에 알려줍니다. 구분 기호는 문서의 일부가 아니므로 여기에서 문서를 읽을 때 제거됩니다. before를 유지하는 이유 DWA는 구분자가 줄의 시작 부분에 있어야 하기 때문입니다. 나는 일반적으로 사람들이 EOFor를 사용하는 것을 보지만 EOL이 문자열은 고유하고 문서에 나타나지 않는 한 원하는 문자열이 될 수 있습니다.

다음과 같이 변경하는 것이 좋습니다.

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

관련 정보