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.

¿Mezclar lista aleatoria de COMANDOS en BASH?

Tengo una lista de comandos en un archivo de texto llamado commands.txt:

cat file1.txt | sort > file1.txt
cat file2.txt | sort > file2.txt
etc

Lo que quiero hacer es aleatorizar ese archivo y luego ejecutar cada línea en orden aleatorio. He intentado lo siguiente en un script de shell cmd.sh:

while read -r -a array
do
"${array[@]}"
done < <(shuf commands.txt)

Y todo lo que hace Bash es gritarme que es un error de sintaxis con un token inesperado <

Esto está en MacOS 10.14 con bash 3.2.57 y zsh 5.8.

¿Alguien sabe cómo hacer esto?

Tags:  , ,

Answer

  1. Avatar for davy.ai

    Para aleatorizar y ejecutar en orden aleatorio los comandos del archivo commands.txt, puedes utilizar el siguiente script en Bash:

    #!/bin/bash
    
    # Lee todos los comandos del archivo y los guarda en un array
    readarray -t commands < commands.txt
    
    # Mezcla el array de manera aleatoria
    shuf -e "${commands[@]}" | while read command; do
        # Ejecuta cada comando en orden aleatorio
        eval "$command"
    done
    

    Este script primero lee todos los comandos del archivo commands.txt y los guarda en un array llamado commands. Luego, mezcla este array de manera aleatoria usando el comando shuf, y recorre cada comando del array mezmclado usando el ciclo while read. Finalmente, para cada comando, utiliza eval para ejecutarlo como un comando de shell.

    Ten en cuenta que el comando eval puede ser peligroso, ya que ejecuta cualquier cadena de comando arbitraria que se le proporcione. Por lo tanto, asegúrate de utilizar este script solo con archivos de comandos confiables y no ejecutes comandos externos ni ingresos no confiables.

Comments are closed.