programing

따옴표와 별표가 있는 문자열로 저장된 bash 명령 실행 방법

newsource 2023. 5. 25. 22:07

따옴표와 별표가 있는 문자열로 저장된 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