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.

Asignar variable en condicional de GNU Parallel

Mi código es:

echo 'url' | parallel "if curl -ss "$url" | grep yes; then vara+="$(echo {})"; else varb+="$(echo {})"; fi"

Pero las variables no están siendo configuradas. La instrucción “if then” funciona perfectamente, por ejemplo, if curl $url | grep yes; then echo hecho; else echo no hecho; fi —> tal cosa funciona, pero las variables no se están estableciendo.

¿Alguien puede ayudarme a encontrar mi error?

Resultado deseado: si curl url y grep una cierta palabra en la fuente, entonces esa URL se agregará a una variable utilizando += y si no se encuentra la palabra, se agregará en otra variable.
Finalmente, después de que se termina el script, quiero tener dos variables: vara que contiene toda la lista de URL que tienen una palabra específica y varb que contiene una lista de URL que no tienen esa palabra en la fuente. Esas variables se utilizan posteriormente en scripts.

Tags:  , ,

Answer

  1. Avatar for davy.ai

    Pueden existir dos problemas potenciales en el código proporcionado:

    1. Declaración de variables: Parece que las variables vara y varb no han sido declaradas antes de ser utilizadas en el script. Puedes declararlas al inicio del script de la siguiente forma:
      vara=""
      varb=""
      

      Esto asegurará que ambas variables se inicialicen como cadenas vacías.

    2. Expansión de variables: Las variables vara y varb no se están expandiendo correctamente. Esto se debe a que la sintaxis utilizada para añadir valores a una variable (es decir, +=) sólo funciona para cadenas citadas con comillas simples o dobles, no dentro de una subtitución de comandos $().

      Para solucionarlo, puedes utilizar la siguiente sintaxis para la expansión de variables:

      vara="${vara} $(echo {})"
      varb="${varb} $(echo {})"
      

      Aquí, las llaves ${} se utilizan para la expansión de variables, y las cadenas citadas se separan por espacio para añadir los valores correctamente.

    Con estos cambios, el código actualizado debería lucir de la siguiente forma:

    vara=""
    varb=""
    
    echo 'url' | parallel "if curl -ss \"$url\" | grep yes; then vara=\"\${vara} \$(echo {})\";
    else varb=\"\${varb} \$(echo {})\";
    fi"
    
    echo "vara: $vara"
    echo "varb: $varb"
    

    Esto debería proporcionarte dos variables vara y varb conteniendo las URLs con y sin la palabra “yes”, respectivamente.

Comments are closed.