GNU/Linux >> Tutoriales Linux >  >> Linux

¿El comando Shuf File> File deja un archivo vacío, pero comandos similares no?

Esta pregunta ya tiene respuestas aquí :¿Por qué `cat`ing un archivo en sí mismo lo borra? [duplicado]

(2 respuestas)
Cerrado hace 2 años.

Sé que esto es una especie de duplicado de otra pregunta (¿Por qué este comando de clasificación me da un archivo vacío?), Pero quería ampliar la pregunta en respuesta a las respuestas dadas.

El comando

shuf example.txt > example.txt

Devuelve un archivo en blanco, porque el shell trunca el archivo antes de mezclarlo, dejando solo un archivo en blanco para mezclar. Sin embargo,

cat example.txt | shuf > example.txt

producirá un archivo aleatorio como se esperaba.

¿Por qué funciona el método de canalización cuando la redirección simple no funciona? Si el archivo se trunca antes de que se ejecuten los comandos, ¿no debería el segundo método también dejar un archivo vacío?

Respuesta aceptada:

El problema es que > example.txt comienza a escribir en ese archivo, antes de shuf example.txt comienza a leerlo. Entonces, como aún no había salida, example.txt está vacío, shuf lee un archivo vacío, y como shuf en este caso no genera ningún resultado, el resultado final permanece vacío.

Su otro comando puede sufrir el mismo problema. > example.txt puede eliminar el archivo antes de cat example.txt comienza a leerlo; depende del orden en que el shell ejecuta esas cosas y cuánto tiempo lleva cat para abrir el archivo.

Para evitar estos problemas por completo, puede usar shuf example.txt > example.txt.shuf && mv example.txt.shuf example.txt .

O podría ir con shuf example.txt --output=example.txt en su lugar.


Linux
  1. 8 comandos espeluznantes que rondan la terminal

  2. ¿Por qué `zip` en un bucle For funciona cuando el archivo existe, pero no cuando no existe?

  3. ¿Cómo sabe el comando Xdg-open qué aplicación usar para abrir un archivo?

  4. archivo:comando no encontrado

  5. ¿Cómo calcula el comando stat los bloques de un archivo?

La diferencia entre más, menos y la mayoría de los comandos

5 comandos de Linux oscuros pero útiles para administradores de sistemas

5 comandos para ver el contenido de un archivo en la línea de comandos de Linux

Comandos prácticos de Linux y Unix Tee para el administrador de Linux

El comando sed de Linux no cambia el archivo de destino

¿Cómo guardar la salida de este comando awk en un archivo?