scripts script programas pasar parametros operaciones manejo else ejemplos cadenas aritmeticas bash delimiter null-character

programas - scripts bash ejemplos



Lectura de cadenas delimitadas nulas a través de un bucle Bash (2)

En bash puedes usar una cadena aquí

while IFS= read -r -d '''' line ; do # Code here done <<<"$var"

Tenga en cuenta que debe alinear el IFS= y simplemente use -d '''' pero asegúrese de que haya un espacio entre ''d'' y la primera comilla simple. Además, agregue el indicador -r para ignorar los escapes.

Además, esto no es parte de su pregunta, pero ¿podría sugerirle una mejor manera de hacer su secuencia de comandos al usar find ? usa la sustitución de procesos.

while IFS= read -r -d '''' file; do # Arbitrary operations on "$file" here done < <(find /some/path -type f -print0)

Quiero iterar a través de una lista de archivos sin preocuparme por los caracteres que puedan contener los nombres de archivo, así que utilizo una lista delimitada por caracteres nulos. El código explicará las cosas mejor.

# Set IFS to the null character to hopefully change the for..in # delimiter from the space character (sadly does not appear to work). IFS=$''/0'' # Get null delimited list of files filelist="`find /some/path -type f -print0`" # Iterate through list of files for file in $filelist ; do # Arbitrary operations on $file here done

El siguiente código funciona cuando se lee de un archivo, pero necesito leer de una variable que contenga texto.

while read -d $''/0'' line ; do # Code here done < /path/to/inputfile


Intenté trabajar con los ejemplos de bash anteriores, y finalmente me di por vencido, y usé Python, que funcionó la primera vez. Para mí resultó que el problema era más simple fuera del caparazón. Sé que esto posiblemente no esté relacionado con una solución de bash, pero de todos modos lo publicaré en caso de que otros quieran una alternativa.

import sh import path files = path.Path(".").files() for x in files: sh.cp("--reflink=always", x, "UUU00::%s"%(x.basename(),)) sh.cp("--reflink=always", x, "UUU01::%s"%(x.basename(),))