5 votes

Différence entre la commande de script et la copie manuelle depuis le terminal vers un fichier externe?

Je étais simplement curieux de savoir s'il y a une différence dans la conservation de l'enregistrement des commandes du terminal en utilisant script nom_fichier et en le copiant manuellement depuis le terminal. Veuillez me dire s'il existe une légère différence. Ce que je sais, c'est que l'utilisation de la commande script ajoute des frappes inutiles au fichier.

6voto

TellMeWhy Points 16004

La commande script crée un script contenant toutes vos interactions avec le terminal pour votre session actuelle. Elle crée essentiellement une capture d'écran en direct et colle le contenu dans un fichier.
Il inclut toutes les entrées et sorties visibles dans le terminal.

La commande history vous donne tous les commandes entrées dans le terminal depuis la première fois que vous l'avez utilisé.
Il affiche uniquement les entrées, soit pour votre session actuelle, soit pour toutes les sessions.

4voto

Tim Points 30349

Il y a une différence, mais pas comme vous pourriez le penser.

Le terminal peut prendre en charge les caractères ASCII - de 0 à 127. Cela inclut l'alphabet latin occidental, y compris certains accents comme l'accent grave ` et la ponctuation comme { et ~.

Donc lorsque vous copiez-collez à partir d'un émulateur de terminal, vous copiez des caractères ASCII dans un fichier UTF-8 (probablement). Bien sûr, UTF-8 et ASCII sont compatibles. Les caractères de 0 à 127 en UTF-8 sont les mêmes qu'en ASCII.

Lorsque vous mettez en sortie dans un fichier, il sera ASCII par défaut, mais cela peut être modifié.

Alors pourquoi quelqu'un utiliserait-il la redirection vers un fichier s'il s'agit d'un encodage moins bon ? Automatisation ou Incompatibilité.

Le terminal que vous utilisez (probablement Terminal Gnome ou X-Term) est un émulateur de terminal - un terminal à l'intérieur d'une fenêtre graphique.

Mais certains terminaux ne sont pas comme ça - ils sont complètement non graphiques, seulement en ligne de commande - comme les terminaux TTY, accessibles avec Ctrl + Alt + FXX est un nombre de 1 à 6. Par exemple, pour accéder à TTY2, utilisez Ctrl + Alt + F2.

Ces terminaux n'ont pas de souris - vous ne pouvez donc pas copier la sortie, ni même la faire défiler.

Si vous exécutez une commande avec beaucoup de sortie, vous pouvez soit la mettre en sortie dans un fichier et utiliser nano ou vi pour la visualiser, soit utiliser la commande less, pour permettre le défilement avec les touches fléchées.

Et si j'ai un code pour surveiller mes terribles vitesses Internet afin d'obtenir une réduction sur le coût de l'Internet, je voudrais peut-être enregistrer automatiquement la vitesse dans un fichier - par exemple rediriger la sortie de wget vers un fichier.

C'est le principal cas d'utilisation - un ordinateur peut le faire sans aucune intervention humaine et sans interface graphique. Dans ces cas, le manque de caractères comme < et > n'est pas un gros problème - vous sauvegardez essentiellement des chiffres.

Si vous souhaitez partager la sortie, pastebinit est une excellente commande. Il suffit d'exécuter votrecommande | pastebinit et il l'enverra à paste.ubuntu.com et vous donnera le lien.

1voto

Sergiy Kolodyazhnyy Points 97292

En bref, la commande script capture plus que juste du texte, et à un niveau différent.

Par exemple la commande ls. Pour produire une sortie colorée, ls ajoute des caractères spéciaux à chaque entrée (lire plus à ce sujet ici). Si vous appelez ls pendant que script capture la sortie, ces caractères spéciaux seront capturés. Il capturera également les caractères d'échappement que vous avez peut-être saisis avec le clavier.

script capture également tout sur ce niveau invisible, inférieur, du système.

En sélectionnant manuellement du texte et en le copiant, vous faites quoi ? Vous sélectionnez du texte à l'intérieur du serveur graphique X, n'est-ce pas ? Alors d'où vient le texte et où va-t-il ? Il arrive déjà rendu, déjà post-traité, colorisé, donc il ne contient pas nécessairement les caractères spéciaux. Il va également dans le presse-papiers (qui, soit dit en passant, est l'un des 3 du système de serveur X), puis lorsque vous le collez il est libéré du presse-papiers.

script est bon lorsque vous voulez enregistrer une session longue et la transmettre à quelqu'un. Les caractères spéciaux ne posent pas de problème lorsque vous exécutez simplement des commandes par défaut, pas celles colorisées (par défaut ls est un alias pour ls --color=auto). Vous pouvez donc utiliser un antislash pour échapper aux alias \ls ou utiliser cette solution du site stackoverflow.

Quant à la méthode de copier-coller, elle est bonne pour une courte sortie que vous voulez simplement transmettre et oublier

Ajouts

J'ai également remarqué que vous êtes plus intéressé par l'history par rapport au script pour enregistrer la liste des commandes que vous entrez dans le terminal. La différence entre eux est que l'historique garde seulement une trace de ce que vous dites au terminal d'exécuter. script est comme l'enregistrement de votre terminal, où tout est capturé.

Ils stockent les données différemment aussi. Alors que pour bash le fichier .bash_history est un texte, d'autres shells peuvent choisir un fichier de données. Par exemple, voici une comparaison entre mon fichier d'historique de mksh, vs .bash_history, vs typescript

xieerqi@eagle:~$ file MKSHHISTFILE 
MKSHHISTFILE: data
xieerqi@eagle:~$ file .bash_history
.bash_history: UTF-8 texte Unicode
xieerqi@eagle:~$ file typescript
typescript: texte ASCII, avec CRLF, terminaisons de ligne LF

Avec history, cela varie d'un shell à un autre. bash garde par défaut tout dans .bash_history, tandis qu'avec des shells comme ksh ou mksh et dash, le fichier d'historique doit être défini par l'utilisateur. script, par défaut, stocke tout dans le fichier typescript, mais l'utilisateur peut également spécifier un autre fichier.

Enfin, l'historique est l'une des commandes intégrées d'un shell, qui sera toujours présente, mais peut ou non nécessiter une configuration. script est un utilitaire, qui peut ou non être présent, mais n'a pas besoin de configuration.

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X