GNU/Linux >> Tutoriales Linux >  >> Linux

¿Redireccionamiento de Io y el comando principal?

Estaba tratando de editar rápidamente un .hgignore archivo del shell bash de Cygwin hoy, y agregué una línea que era un error. No estoy seguro de si esta era la mejor manera de hacerlo, pero rápidamente pensé en usar head -1 .hgignore para eliminar la línea ofensiva (anteriormente solo tenía una línea en el archivo). Efectivamente, cuando se ejecuta da la primera línea como la única salida.

Pero cuando traté de redirigir la salida y reescribir el archivo usando head -1 .hgignore > .hgignore , el archivo estaba vacío. ¿Por qué pasó esto? Si trato de agregar en su lugar, head -1 .hgignore >> .hgignore , se agrega correctamente, pero obviamente este no es el resultado deseado. ¿Por qué una redirección truncada no funciona en este caso?

Respuesta aceptada:

Cuando el shell obtiene una línea de comando como:command > file.out el propio shell abre (y tal vez crea) el archivo llamado file.out . El shell establece el descriptor de archivo 0 en el descriptor de archivo que obtuvo al abrir. Así es como funciona la redirección de E/S:cada proceso conoce los descriptores de archivo 0, 1 y 2.

La parte difícil de esto es cómo para abrir file.out . La mayoría de las veces, desea file.out abierto para escribir en el desplazamiento 0 (es decir, truncado) y esto es lo que hizo el shell por usted. Truncó .hgignore, lo abrió para escritura, duplicó el descriptor de archivo a 0, luego ejecutó head . Eliminación instantánea de archivos.

En bash shell, haces un set noclobber para cambiar este comportamiento.


Linux
  1. ¿Redirigir al mismo archivo que el archivo de origen procesado por el comando?

  2. 5 ejemplos prácticos de Head Command en Linux

  3. Tuberías y redirección en Linux - ¡Explicado!

  4. Ejemplos de comandos head en Linux

  5. ¿Cuál es el comando para copiar, leer y eliminar archivos en Linux?

Cómo usar el comando de cabeza de Linux

8 ejemplos de comandos de cabeza en Linux

Cómo usar Sudo y el archivo Sudoers

7 formas de usar el comando Head de Linux

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

El comando ln en Linux:crear enlaces blandos y duros