Si je comprends bien le cat
manuel:
concaténer des fichiers et imprimer sur la sortie standard
cat
prendra les fichiers en argument et les imprimera sur la sortie standard.
Ce que je n'obtiens pas, c'est si j'utilise la commande:
cat img.png > copy.png
J'obtiendrai 2 fichiers png identiques alors que si je viens
cat img.png
J'ai toutes les chances que mon terminal soit foiré et mal interprété ce que je tape.
- Comment est-ce possible?
- Les valeurs binaires sont toujours des données binaires. Pourquoi ne montre-t-il pas simplement une série de 0 et 1 ou l'interprétation de ces données binaires en ASCII ou quel que soit l'encodage dans le terminal?
- Ce comportement est-il également possible en
cat
créant un fichier texte contenant des caractères étranges? - Un mécanisme pour empêcher ce comportement comme l'instruction try {} catch {} doit-il être implémenté?
reset
commande peut parfois aider, mais ce n'est pas une solution miracle.reset
et unereset
touche Ctrl-J? Je ne vois aucune (ni aucune raison d'aller de la manière la plus compliquée)Réponses:
cat
concatène les fichiers fournis comme arguments sur la ligne de commande à la sortie standard, il lit les octets à la fois et, par défaut, n'effectue aucune interprétation des octets qu'il lit.Dans votre premier exemple, vous redirigez stdout vers un fichier, c'est pourquoi vous obtenez un nouveau fichier.
Dans votre deuxième exemple, les octets sont écrits sur le terminal, et c'est le terminal qui interprète les séquences de caractères comme des séquences de contrôle pour le terminal, c'est pourquoi vous obtenez un comportement inhabituel sur votre terminal. Cela n'a rien à voir avec
cat
cela,cat
je ne sais pas ce que vous allez faire avec sa sortie. Vous pouvez l'envoyer via une pipe vers un autre programme pour interpréter / traiter / imprimer ou jouer "Chanter sous la pluie".Donc, suivant la philosophie unix,
cat
ne devrait pas essayer de deviner ce que vous essayez de faire.modifier 1 réponse au 1er commentaire de @ kiwy ci-dessous.
Oui et non, laissez-moi vous expliquer,
Non, si vous vous connectez
cat
à un terminal, car il (le logiciel du terminal) envoie la sortie à votre écran ou interprète des séquences de contrôle (il émule un ancien matériel, c'est-à-dire un périphérique téléscripteur ).mais,
Oui, si vous vous adressez à un tuyau et que le programme reçu peut interpréter les caractères comme des commandes.
regardez cat this pour un exemple,
cat anyOldShellScript | bash
bash interprétera ce qu'il obtient comme des commandes.la source
cat
un fichier binaire qui peut contenir des instructions en texte brut commerm -rf .
celui-ci pourrait être interprété?echo
sortir si vous le souhaitez. Voir stackoverflow.com/questions/5947742/… pour savoir comment le faire et termsys.demon.co.uk/vtansi.htm pour une partie de ce qui est possibleJe suppose que cela se produit principalement en raison de caractères non imprimables avec des codes inférieurs à 0x20. Ce sont des codes de contrôle / d'échappement spéciaux, qui sont utilisés pour des touches comme Retour arrière, Supprimer, etc.
la source