cat < file
imprime el contenido del archivo en stdout.
cat > file
lee stdin hasta que se detecta Ctrl+ Dy el texto de entrada se escribe en el archivo .
cat <> file
, al menos en mi versión de Bash, imprime felizmente el contenido del archivo (sin error), pero no modifica el archivo ni actualiza la marca de tiempo de modificación.
¿Cómo justifica el estándar Bash lo que aparentemente se ignora >
en la tercera declaración y, lo que es más importante, está haciendo algo?
4<>file
) es útil, y supongo que 0 es un valor predeterminado tan bueno como cualquier otro cuando lo omites. Leer desde stdout no es mejor.<>
También es útil en algunos sistemas (como Linux) para abrir canalizaciones con nombre sin bloquear hasta que otro proceso lo abra para escribir.<>
operador podría ser útil para escribir una aplicación que funcionara con varios terminales y ocasionalmente quisiera iniciar un shell. Ese shell a su vez no podría ejecutar aplicaciones que se ejecutan desde un terminal de control ordinario a menos que pueda hacer uso de<>
... como ... el localizadormore
, que se lee desde un error estándar para obtener sus comandos, por lo que la entrada estándar y la salida estándar Ambos están disponibles para su uso habitual.cat food | more - >/dev/tty03 2<>/dev/tty03
<> file
abre el archivo (en el descriptor de archivo 0 (entrada estándar) de forma predeterminada, al igual que<
) en + lectura y escritura modo sin truncamiento y crear el archivo si no existía previamente .Eso corresponde a los
O_RDWR|O_CREAT
indicadores pasados a laopen()
llamada al sistema. Por el contrario<
esO_RDONLY
y>
esO_WRONLY|O_CREAT|O_TRUNC
y>>
O_WRONLY|O_CREAT|O_APPEND
.Tener stdin escribible no suele ser útil ya que las aplicaciones generalmente no escriben en su stdin. Las aplicaciones generalmente no esperan leer y escribir en un descriptor de archivo que reciben al inicio; Por lo general, leen de stdin (o un descriptor de archivo que abren) y escriben en stdout o stderr (o un descriptor de archivo que abren).
<>
puede tener sus usos:cat <> file
sobrecat < file
si no desea que el comando falle sifile
no existe, pero un vacíofile
creado en su lugar.El aspecto no truncado de
<>
hace que sea útil sobrescribir archivos en su lugar. Sin embargo, en ese caso, generalmente no lo usa en el descriptor de archivo 0:reemplaza los primeros 3 bytes de
file
conxxx
.En algunos sistemas como Linux,
<>
en una tubería con nombre (FIFO) abre la tubería con nombre sin bloquear (sin esperar a que algún otro proceso abra el otro extremo), y garantiza que la estructura de la tubería se mantenga viva. Por ejemplo en:sed
maneja datos entrantes de cualquier número de otros procesos que le escriben y nunca los veeof
.fuente
<>
predeterminado es1<>
(stdout) en lugar de0<>
(stdin). Este es un error de cumplimiento POSIX que informé y se solucionará en la próxima versión. github.com/att/ast/issues/75 Pero hasta que las versiones actuales de ksh93 caigan en desuso, debe incluir el número de descriptor de archivo para usarlo de forma<>
portátil.mkfifo fifo; exec 3<>fifo
se bloquearían?