Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

455
Visualizações
Citas anidadas triples en script de shell

Estoy tratando de escribir un script de shell que llama a otro script que luego ejecuta un comando rsync. El segundo script debe ejecutarse en su propia terminal, por lo que uso un comando gnome-terminal -e "..." . Uno de los parámetros de este script es una cadena que contiene los parámetros que se deben dar a rsync. Los puse entre comillas simples. Hasta aquí, todo funcionaba bien hasta que uno de los parámetros de rsync era una ruta de directorio que contenía un espacio. Probé numerosas combinaciones de ',",\",\' pero el script no se ejecuta en absoluto o solo se toma la primera parte de la ruta.

Aquí hay una versión ligeramente modificada del código que estoy usando

 gnome-terminal -t 'Rsync scheduled backup' -e "nice -10 /Scripts/BackupScript/Backup.sh 0 0 '/Scripts/BackupScript/Stamp' '/Scripts/BackupScript/test' '--dry-run -g -o -p -t -R -u --inplace --delete -r -l '\''/media/MyAndroid/Internal storage'\''' "

Dentro Backup.sh se ejecuta este comando

 rsync $5 "$path"

donde la $path destino se calcula a partir del texto en Stamp .

¿Cómo puedo lograr estos tres niveles de cotizaciones anidadas?

Estas son algunas preguntas que miré hace un momento (también probé otras fuentes antes)

  • https://unix.stackexchange.com/questions/23347/wrapping-a-command-that-includes-single-and-double-quotes-for-other-command
  • ¿Cómo hacer que las comillas dobles anidadas sobrevivan al intérprete bash?
  • Usando múltiples capas de comillas en bash
  • Bash de citas anidadas

No pude aplicar las soluciones a mi problema.

over 4 years ago · Santiago Trujillo
2 Respostas
Responde à pergunta

0

Aquí hay un ejemplo. caller.sh usa gnome-terminal para ejecutar foo.sh , que a su vez imprime todos los argumentos y luego llama a rsync con el primer argumento.

llamador.sh :

 #!/bin/bash gnome-terminal -t "TEST" -e "./foo.sh 'long path' arg2 arg3"

foo.sh :

 #!/bin/bash echo $# arguments for i; do # same as: for i in "$@"; do echo "$i" done rsync "$1" "some other path"

Editar: si $1 contiene varios parámetros para rsync, algunos de los cuales son rutas largas, lo anterior no funcionará, ya que bash pasa "$1" como un parámetro o $1 como varios parámetros, dividiéndolo sin tener en cuenta las comillas contenidas.

Hay (al menos) una solución alternativa, puede engañar a bash de la siguiente manera:

llamador2.sh :

 #!/bin/bash gnome-terminal -t "TEST" -e "./foo.sh '--option1 --option2 \"long path\"' arg2 arg3"

foo2.sh :

 #!/bin/bash rsync_command="rsync $1" eval "$rsync_command"

Esto hará el equivalente a escribir rsync --option1 --option2 "long path" en la línea de comando.

ADVERTENCIA : este truco presenta una vulnerabilidad de seguridad, $1 puede diseñarse para ejecutar varios comandos si el usuario tiene alguna influencia sobre el contenido de la cadena (por ejemplo '--option1 --option2 \"long path\"; echo YOU HAVE BEEN OWNED' ejecutará rsync y luego ejecutará el comando echo ).

over 4 years ago · Santiago Trujillo Relatório

0

¿Intentó escapar del espacio en la ruta con "\" (sin comillas)?

gnome-terminal -t 'Rsync scheduled backup' -e "nice -10 /Scripts/BackupScript/Backup.sh 0 0 '/Scripts/BackupScript/Stamp' '/Scripts/BackupScript/test' '--dry-run -g -o -p -t -R -u --inplace --delete -r -l ''/media/MyAndroid/Internal\ storage''' "

over 4 years ago · Santiago Trujillo Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda