Exécution de la sortie du script et vérification de la cohérence


0

Étant donné un fichier qui a été généré par script, existe-t-il un moyen d'exécuter toutes ces commandes dans l'ordre, puis de vérifier si le résultat correspond à ce qui était dans le fichier de script?

Je suppose que diff peut être utilisé pour la dernière partie, mais je ne sais pas comment faire la première. Des idées?

Utiliser un shell tcsh sur Linux (Debian, mais je doute que cela soit important).


La réponse sera oui malgré tout, mais certaines informations environnementales vous aideraient à obtenir une meilleure réponse. La fenêtre? Unix? Quelle coquille?
EBGreen

@EBGreen, voir edit
soandos

Réponses:


1

modifier : Du manuel:

Le script place tout dans le fichier journal, y compris les sauts de ligne et les backspaces. Ce n'est pas ce que l'utilisateur naïf attend.

Cela signifie qu'il pourrait être possible de le faire dans les cas les plus simples, en recherchant des occurrences de $PS1 dans la sortie et en exécutant la chaîne après, mais cela pourrait bientôt devenir impossible:

  • Vous ne pouvez pas voir la différence entre un caractère littéral et un caractère d'échappement comme ^C.
  • N'importe quel travail en arrière-plan peut insérer du texte à tout moment, gâchant la sortie. while true; do sleep $RANDOM; echo garbage; done &
  • S'il enregistre une erreur standard, il existe tout le problème de sortie asynchrone.

Si c'est du tout une option, je préférerais utiliser / var / log / cmdlog et voir si tout le texte produit par les commandes enregistrées se trouve n'importe où dans la liste. script fichier.


Je ne veux pas refaire tout le travail que j'ai déjà fait, d'où la première partie de la question. Comment puis-je extraire les commandes du fichier de script?
soandos

Copier et coller. Il devrait fonctionner comme si vous exécutiez le script d'origine, mais dans un contexte différent.
l0b0

Non, chaque pression sur une touche (même la flèche vers le haut) est enregistrée, ce qui perturbe le terminal. En outre, il lancerait la sortie des commandes, ce que je ne veux pas non plus
soandos

Si c'est une application interactive, vous feriez probablement mieux d'utiliser expect. Mais cela ne ne pas lancer le sortie des commandes - (command) est différent de $(command).
l0b0

Quand je dis script Je veux dire la commande script pas un script que j'ai écrit. Votre réponse ne semble pas en être consciente
soandos

0

Ok, donc l'une des sémantiques de diff c’est-à-dire qu’il génère du texte si les fichiers diffèrent et qu’il ne génère rien s’ils sont identiques.

Fichiers donnés foo et bar, voici ce que vous pouvez faire:

# Run your script
if [ "$(diff foo bar)" = "" ]; then
    echo "They are the same"
else
    echo "They are different"
fi

(Votre première partie n'est pas tout à fait claire - avez-vous un exemple de sortie out.template et script > out.log et voulez vous assurer que out.template et out.log sont identiques? Ou autre chose?)


Ce n'est pas un script dans le sens où c'est un script qui peut être exécuté. Il s’agit d’un script en ce sens qu’il s’agit du résultat de la commande de script. Comment puis-je l'exécuter?
soandos

@soandos Pas facilement - il vide tout, des sorties couleur VT100 aux sorties ncurses programmes. (La page de manuel indique que this is not what the naive user expects ).
new123456
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.