따옴표와 별표가 있는 문자열로 저장된 bash 명령 실행 방법
다음 명령을 실행하려고 합니다.
mysql AMORE -u username -ppassword -h localhost -e "SELECT host FROM amoreconfig"
나는 그것을 끈으로 저장합니다:
cmd="mysql AMORE -u username -ppassword -h localhost -e\"SELECT host FROM amoreconfig\""
테스트:
echo $cmd
mysql AMORE -u username -ppassword -h localhost -e"SELECT host FROM amoreconfig"
다음을 수행하여 실행해 보십시오.
$cmd
mysql의 도움말 페이지가 표시됩니다.
mysql Ver 14.14 Distrib 5.1.31, for pc-linux-gnu (i686) using readline 5.1
Copyright 2000-2008 MySQL AB, 2008 Sun Microsystems, Inc.
This software comes with ABSOLUTELY NO WARRANTY. This is free software,
and you are welcome to modify and redistribute it under the GPL license
Usage: mysql [OPTIONS] [database]
(...)
제가 분명히 견적서를 잘못 쓰고 있는 것 같은데 무엇이 문제인지 알 수가 없습니다.
시도해 보셨습니까?
eval $cmd
탈출 방법에 대한 후속 질문의 경우*
그것이 벌거벗거나 이중 따옴표로 묶일 때 특별한 의미가 있기 때문에: 단일 따옴표를 사용합니다.
MYSQL='mysql AMORE -u username -ppassword -h localhost -e'
QUERY="SELECT "'*'" FROM amoreconfig" ;# <-- "double"'single'"double"
eval $MYSQL "'$QUERY'"
보너스: 그것은 또한 좋게 읽힙니다: eval mysql query ;-)
BashFAQ #50의 지침에 따라 문자열이 아닌 배열을 사용합니다.
문자열을 사용하는 것은 매우 나쁜 보안 관행입니다.다음의 경우를 생각해 보십시오.password
(또는 쿼리의 where 절 또는 기타 구성 요소)는 사용자가 제공합니다.eval
을 포함하는 비밀번호.$(rm -rf .)
!
로컬 명령 실행 중
cmd=( mysql AMORE -u username -ppassword -h localhost -e "SELECT host FROM amoreconfig" )
"${cmd[@]}"
명령어를 명확하게 인쇄
cmd=( mysql AMORE -u username -ppassword -h localhost -e "SELECT host FROM amoreconfig" )
printf 'Proposing to run: '
printf '%q ' "${cmd[@]}"
printf '\n'
SSH를 통해 명령 실행(방법 1: Stdin 사용)
cmd=( mysql AMORE -u username -ppassword -h localhost -e "SELECT host FROM amoreconfig" )
printf -v cmd_str '%q ' "${cmd[@]}"
ssh other_host 'bash -s' <<<"$cmd_str"
SSH를 통해 명령 실행(방법 2: 명령줄)
cmd=( mysql AMORE -u username -ppassword -h localhost -e "SELECT host FROM amoreconfig" )
printf -v cmd_str '%q ' "${cmd[@]}"
ssh other_host "bash -c $cmd_str"
이것을 먹어보세요.
$ cmd='mysql AMORE -u root --password="password" -h localhost -e "select host from amoreconfig"'
$ eval $cmd
심지어 "평가"도 필요하지 않습니다.문자열 앞에 달러 기호를 붙이기만 하면 됩니다.
cmd="ls"
$cmd
cmd 변수가 필요하지 않도록 다음 작업을 수행할 수 있습니다.
eval 'mysql AMORE -u root --password="password" -h localhost -e "select host from amoreconfig"'
언급URL : https://stackoverflow.com/questions/2005192/how-to-execute-a-bash-command-stored-as-a-string-with-quotes-and-asterisk
'programing' 카테고리의 다른 글
"이 작업을 수행하는 동안 오류가 발생했습니다." (0) | 2023.05.25 |
---|---|
EC2 서버의 MongoDB 또는 AWS SimpleDB? (0) | 2023.05.25 |
PostgreSQL CASE...여러 조건으로 종료 (0) | 2023.05.25 |
Node.js를 통해 Postgres에 연결하는 방법 (0) | 2023.05.25 |
Git 수정, 삭제 및 추적되지 않은 모든 파일을 추가하시겠습니까? (0) | 2023.05.25 |