cat < file
imprime le contenu du fichier sur la sortie standard.
cat > file
lit stdin jusqu'à ce que Ctrl+ Dsoit détecté et que le texte saisi soit écrit dans le fichier .
cat <> file
, du moins dans ma version de Bash, imprime le contenu du fichier avec bonheur (sans erreur), mais ne modifie pas le fichier et ne met pas à jour l’horodatage de la modification.
Comment la norme Bash justifie l'apparemment ignoré >
dans la troisième déclaration - et, plus important encore , est - il fait quoi que ce soit?
4<>file
) est utile, et je suppose que 0 est un aussi bon choix par défaut que n'importe quel autre. Lire de stdout n'est pas mieux.<>
est également utile sur certains systèmes (comme Linux) pour ouvrir des canaux nommés sans les bloquer jusqu’à ce qu’un autre processus l’ouvre en écriture.<>
opérateur pourrait être utile pour écrire une application fonctionnant avec plusieurs terminaux et souhaitant parfois démarrer un shell. Ce shell ne pourrait à son tour pas exécuter d’applications exécutées à partir d’un terminal de contrôle ordinaire, à moins de pouvoir utiliser<>
... comme le pageurmore
, qui lit les erreurs standard pour obtenir ses commandes, ainsi les entrées et sorties standard sont tous deux disponibles pour leur usage habituel.cat food | more - >/dev/tty03 2<>/dev/tty03
<> file
ouvre le fichier (sur le descripteur de fichier 0 (stdin) par défaut, comme<
) en mode lecture + écriture sans troncature et en créant le fichier s'il n'existait pas auparavant .Cela correspond aux
O_RDWR|O_CREAT
indicateurs passés à l'open()
appel système. Par contraste<
estO_RDONLY
et>
estO_WRONLY|O_CREAT|O_TRUNC
et>>
O_WRONLY|O_CREAT|O_APPEND
.Avoir stdin en écriture n'est pas souvent utile car les applications n'écrivent généralement pas sur leur stdin. Les applications ne s’attendent généralement pas à lire et à écrire sur un descripteur de fichier qu’elles reçoivent au démarrage; ils lisent généralement depuis stdin (ou un descripteur de fichier qu'ils ouvrent eux-mêmes) et écrivent dans stdout ou stderr (ou un descripteur de fichier qu'ils s'ouvrent eux-mêmes).
<>
peut avoir ses utilisations:cat <> file
pluscat < file
si vous ne voulez pas que la commande échoue si ellefile
n'existe pas, mais un videfile
créé à la place.L'aspect non tronquant de
<>
rend utile d'écraser les fichiers en place. Cependant, dans ce cas, vous ne l'utilisez généralement pas sur le descripteur de fichier 0:remplace les 3 premiers octets de
file
avecxxx
.Sur certains systèmes tels que Linux,
<>
sur un canal nommé (FIFO), il ouvre le canal nommé sans le bloquer (sans attendre qu'un autre processus ouvre l'autre extrémité) et s'assure que la structure du canal reste active. Par exemple dans:sed
gère les données entrantes à partir de n'importe quel nombre de processus écrivant dessus et ne voit jamaiseof
.la source
<>
défaut est1<>
(stdout) au lieu de0<>
(stdin). C’est un bogue de conformité POSIX que j’ai signalé et qui sera corrigé dans la prochaine version. github.com/att/ast/issues/75 Mais jusqu'à ce que les versions actuelles de ksh93 deviennent inutilisables, vous devez inclure le numéro du descripteur de fichier à utiliser de manière<>
portable.mkfifo fifo; exec 3<>fifo
bloquerait?