GNU/Linux >> Tutoriales Linux >  >> Linux

¿Cómo se altera el orden de ejecución en el shell en lo que respecta a la redirección alrededor de 1 vez de cada 1000 en el sistema?

Teniendo en cuenta estas preguntas y respuestas sobre el orden de ejecución en el shell en relación con la redirección, y a pesar del hecho de que si un archivo no existe, se crea primero para que cat example.txt | shuf > example.txt no se queja de que el archivo no existe, lo que simplemente confirma el orden por lo que entiendo, entonces, ¿por qué aproximadamente una vez cada mil veces en mi sistema, la reproducción aleatoria funciona cuando hago esto (la copia de seguridad contiene 15 valores estáticos cada uno en su línea)

for i in $(seq 1 1000); do
    cp backup test
    echo $i
    cat test | shuf > test
    cat test
done

¿Cómo puede haber aparentemente una excepción a la regla?

Respuesta aceptada:

Aquí:

cat test | shuf > test

> tiene prioridad en el sentido de que esto significa:

(cat test) | (shuf > test) 

y no:

(cat test | shuf) > test

Aunque si usáramos dos archivos diferentes, no habría ninguna diferencia entre estas dos agrupaciones de todos modos.

Lo que se vuelve significativo cuando usa el mismo archivo es que los dos comandos a cada lado de la tubería se ejecutan simultáneamente . Esos comandos son cat test y shuf > test . > significa "abierto para escribir y truncar", mientras que cat va a "abrir para lectura", leer y cerrar. Dado que esas dos cosas están sucediendo concurrentemente , la relación entre el orden de sus operaciones colectivas es indeterminada . Existe la posibilidad de que cat podrá sorber el archivo antes de que el shell administre shuf > test lo trunca. Pero esa es una pequeña posibilidad, ya que hay más involucrados; solo sucederá si cat tiene mucha suerte en relación con la programación de la prueba shuf > test .

Moraleja de la historia: No hagas esto, usa dos archivos en su lugar.


Linux
  1. Linux:¿cómo averiguar qué discos duros hay en el sistema?

  2. ¿Cómo capturar el estado de devolución y usar Tee al mismo tiempo en Korn Shell?

  3. ¿Cómo hacer que la barra de actividades de Gnome Shell sea pequeña todo el tiempo?

  4. Obtenga el tiempo de ejecución del programa en el shell

  5. ¿Cómo puedo probar la memoria RAM para detectar daños en los datos en un sistema basado en ARM?

Cómo limitar el acceso del usuario al sistema Linux

Cómo cambiar el shell predeterminado en el sistema Linux

Averigüe cuánto tiempo se tarda en iniciar su sistema Linux

Verifique y descubra cuánto tiempo lleva iniciar su sistema Linux

Cómo usar el comando fd en el sistema Linux

Imprimir el tiempo de ejecución de la secuencia de comandos de Shell en Linux