자체 스크립트의 인수로 mysql을 실행할 때의 문제


1

Xubuntu 16.04 및 mysql 5.7 서버를 설치했습니다.

나는 이름으로 간단한 스크립트를 만듭니다 mysql-wrapper:

#!/bin/bash
mysql -u myuser -pmypwd mydatabase --table $*

이제 명령을 실행하고 성공적으로 실행합니다.

mysql-wrapper -e "STATUS"

그런 다음 다음 명령을 실행하십시오 (공백 포함).

mysql-wrapper -e "SHOW TABLES"

문제가 발생합니다 : mysql은 불법 명령으로 mysql을 실행하는 것처럼 명령에 대한 도움말을 인쇄합니다.

내 문제를 어떻게 해결할 수 있습니까? 아니면 별칭을 더 잘 사용할 수 있습니까?


작은 따옴표 사이에서 명령을 시도하십시오. mysql-wrapper -e "'SHOW TABLES'"
Parto

나는 시도 : \ ".. \"와 ' "...'"와 '\ "... \"'와 \ " '...'\", 이제 성공 :-(
Yura Shinkarev

-pmypwd프로세스 목록에 비밀번호 일반 텍스트가 표시됩니다. 추가 한 안전 경고가 표시 될 수 있습니다 (mysql -pmypwd은 5.6 또는 5.7에서 메소드를 비활성화했습니다 ). my,cnf비밀번호를 저장하는 데 사용 합니다. "STATUS"는 항상 작동하지만 "SHOW TABLES"는 데이터베이스를 설정 한 경우에만 작동합니다.
Rinzwind

@Rinzwind, yes my.cnf에서 사용자를 구성 할 수는 있지만 어쨌든 모든 스크립트에 대한 특정 인수가 있습니다 (예 : --table, 나중에 다른 것을 추가 할 수 있음). 공통 스크립트에서 mydatabase를 사용합니다. 어쨌든 다음을 실행하십시오 : mysql-wrapper -e "STATUS; STATUS;" -일 이네 그러나 다음에는 작동하지 않습니다. mysql-wrapper -e "STATUS; STATUS;"
Yura Shinkarev

답변:


2

일반적인 사용법에서는 plain을 사용할 이유가 없습니다 $*. 항상 사용해야 "$@"합니다 (따옴표가 포함되어 있음).

#!/bin/bash
mysql -u myuser -pmypwd mydatabase --table "$@"

"$@"스크립트 인수 pe가 그대로 명령에 전달되는 경우 에만 필드 분할 및 globbing으로부터 안전합니다.

차이점을 보려면 다음을 포함하는 스크립트를 실행하십시오.

#!/bin/bash
printf "%s\n" $*
printf "%s\n" $@
printf "%s\n" "$*"
printf "%s\n" "$@"

다양한 주장으로.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.