heredoc을 사용하여 변수 값 인쇄 수행 [닫기]

heredoc을 사용하여 변수 값 인쇄 수행 [닫기]

/var/www/html다음 heredocument를 실행하면 다음 cat과 같이 작동합니다.만드는 사람/opt/dwa.sh- 함수와 MYSQL 문서가 포함된 파일을 생성합니다.

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이제는 대신 다음을 입력했습니다 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여전히 같은 결과입니다. 여기에 있는 문서에서 큰따옴표("EOT")로 인해 변수 확장을 허용하지 않는다는 점을 고려하면 cat이것이 더욱 이상하다고 생각합니다 .

저는 Bash를 처음 접했고 변수를 사용한 경험이 많지 않습니다(제가 수강한 과정에 실제로 참여한 적이 없습니다). 어쩌면 당신은 조언을 제공할 수 있습니다.

업데이트---문제를 해결했지만 방법을 이해하지 못합니다.

콘솔에서 실행한 후 exec bash일반 실행 모드를 반복해 보았는데 DWA_INSTALL이번에는 생성된 파일이 나타나지 않았습니다 html/example.com. 이유는 모르겠지만 도움이 되었습니다.

답변1

나는 다음 방법을 이해하지 못한 채 이 문제를 해결했습니다.

환경이 아닌 모든 변수(즉, 직접 선언한 모든 변수)를 지우려면 콘솔에서 다음을 실행합니다.

exec bash

일반 실행 모드를 반복해 보았는데 DWA_INSTALL이번에는 준비 문제 없이 파일이 생성되었습니다 html/example.com.

이유는 모르겠지만 도움이 됩니다. 무슨 일이 일어나고 있는지 알고 있다면 이 답변을 편집하고 설명을 제공해 주세요.

관련 정보