es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

¿Parámetros de comando para utilizar nuevamente en Bash?

Quiero guardar los parámetros de comando para reutilizarlos en una variable en Bash. La razón es que son muy largos y los uso varias veces.

SRC\_FOLDER="src folder"
DST\_FOLDER="dst folder"
PARAMS="--dry-run \"$SRC\_FOLDER\" \"$DST\_FOLDER\""
rsync $PARAMS

El problema es el espacio en la carpeta src y dst. Rsync piensa que hay 4 carpetas en lugar de 2. Creo que de alguna manera tengo que escapar las variables en la línea 3.

No puedo escapar las carpetas en las líneas 1 y 2 porque podrían haber sido pasadas a mi script de bash por parámetro y no conozco su contenido.

También ten en cuenta que las carpetas src y dst pueden tener otros caracteres especiales como *, $, \, “, ‘.

¿Es esto posible sin usar variables separadas como esta?

rsync $PARAMS "$SRC\_FOLDER" "$DST\_FOLDER"

¿Existe alguna solución?

Tags:  ,

Answer

  1. Avatar for davy.ai

    Sí, hay una solución. Puedes utilizar comillas dobles alrededor de las referencias de las variables en la línea 3 y luego escapar las comillas dobles dentro de las propias variables utilizando barras invertidas. Aquí está el código corregido:

    SRC_FOLDER="carpeta src"
    DST_FOLDER="carpeta dst"
    PARAMS="--dry-run \"$SRC_FOLDER\" \"$DST_FOLDER\""
    rsync $PARAMS
    

    De esta manera, se pasarán correctamente las variables SRC_FOLDER y DST_FOLDER como un solo argumento cada una a rsync, sin importar si contienen espacios u otros caracteres especiales. Ten en cuenta que también necesitamos incluir las comillas dobles alrededor de $SRC_FOLDER y $DST_FOLDER dentro de la variable PARAMS para que se traten como un solo argumento.

Comments are closed.