script programas programacion pasar parametros español ejemplos comandos comando bash scripting escaping quotes

bash - programas - programacion shell linux ejemplos



Cómo ejecutar un comando de bash almacenado como una cadena con comillas y asterisco (5)

Has probado:

eval $cmd

Para la pregunta subsiguiente sobre cómo escapar * ya que tiene un significado especial cuando está desnudo o con cadenas entre comillas dobles: use comillas simples.

MYSQL=''mysql AMORE -u username -ppassword -h localhost -e'' QUERY="SELECT "''*''" FROM amoreconfig" ;# <-- "double"''single''"double" eval $MYSQL "''$QUERY''"

Bonus: También se lee bien: eval mysql query ;-)

Intento ejecutar el siguiente comando:

mysql AMORE -u username -ppassword -h localhost -e "SELECT host FROM amoreconfig"

Lo guardo en una cadena:

cmd="mysql AMORE -u username -ppassword -h localhost -e/"SELECT host FROM amoreconfig/""

Pruébalo :

echo $cmd mysql AMORE -u username -ppassword -h localhost -e"SELECT host FROM amoreconfig"

Intenta ejecutar haciendo:

$cmd

Y me sale la página de ayuda de 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] (...)

Supongo que estoy haciendo algo mal con las citas, pero no puedo averiguar cuál es el problema.


No necesitas el "eval" incluso. Solo ponga un signo de dólar delante de la cuerda:

cmd="ls" $cmd


Para eliminar la necesidad de la variable cmd, puede hacer esto:

eval ''mysql AMORE -u root --password="password" -h localhost -e "select host from amoreconfig"''


Use una matriz, no una cadena, como se proporciona como guía en mywiki.wooledge.org/BashFAQ/050 .

Usar una cadena es una práctica de seguridad extremadamente mala : considere el caso donde la password (o una cláusula where en la consulta, o cualquier otro componente) es proporcionada por el usuario; no desea eval una contraseña que contenga $(rm -rf .) !

Simplemente ejecutando un comando local

cmd=( mysql AMORE -u username -ppassword -h localhost -e "SELECT host FROM amoreconfig" ) "${cmd[@]}"

Imprimir su comando sin ambigüedad

cmd=( mysql AMORE -u username -ppassword -h localhost -e "SELECT host FROM amoreconfig" ) printf ''Proposing to run: '' printf ''%q '' "${cmd[@]}" printf ''/n''

Ejecutando su comando sobre SSH (Método 1: Uso de 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"

Ejecutando su comando sobre SSH (Método 2: Línea de comando)

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"


prueba esto

$ cmd=''mysql AMORE -u root --password="password" -h localhost -e "select host from amoreconfig"'' $ eval $cmd