더 큰 스크립트의 일부로 다음 코드를 사용하고 있습니다.
mysql -u root -p << MYSQL
create user '${DOMAIN}'@'localhost' identified by '${DOMAIN}';
create database ${DOMAIN};
GRANT ALL PRIVILEGES ON ${DOMAIN}.* TO ${domain}@localhost;
MYSQL
보시다시피, 권한이 부여된 모든 권한을 가진 데이터베이스 사용자와 동일한 값을 가진 데이터베이스 인스턴스를 생성합니다(비밀번호도 동일한 값입니다).
DB user ====> ${domain}.
DB user password ====> ${domain}.
DB instance ====> ${domain}.
다른 비밀번호가 필요하기 때문에 문제가 됩니다. 물론 전체 스크립트 실행이 완료된 후 `${domain}에서 비밀번호를 수동으로 변경할 수 있지만 이는 내가 원하는 것이 아닙니다.
제가 원하는 것은 실행시 비밀번호를 직접 입력/붙여넣기 하는 것인데,대화형으로.
즉, 데이터베이스 사용자의 비밀번호를 묻는 메시지가 스크립트 실행의 필수적인 부분이 되기를 바랍니다.
다음 코드를 시도했지만 실패했습니다.
mysql -u root -p << MYSQL
create user '${DOMAIN}'@'localhost' identified by -p;
create database ${DOMAIN};
GRANT ALL PRIVILEGES ON ${DOMAIN}.* TO ${domain}@localhost;
MYSQL
스크립트 실행 후 비밀번호를 수동으로 변경하는 대신 스크립트 실행에 직접 입력/붙여넣어 비밀번호를 대화형으로 삽입할 수 있는 올바른 방법은 무엇입니까?
답변1
사용자가 미리 변수를 저장하도록 하십시오 read
.
echo "Please enter password for user ${domain}: "; read -s psw
mysql -u root -p << MYSQL
create user '${domain}'@'localhost' identified by '${psw}';
create database ${domain};
GRANT ALL PRIVILEGES ON ${domain}.* TO ${domain}@localhost;
MYSQL
여기서 명령은 read
사용자 입력을 읽고 이를 $psw
변수에 저장합니다. 비밀번호 값을 입력한 후 MySQL 데이터베이스에 연결하려면 MySQL 루트 비밀번호를 입력하라는 메시지가 표시됩니다( -p
플래그 = 대화형 비밀번호 프롬프트).