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