5 votes

Commande SCRIPT des versions Dos et/ou Windows de Unix

De retour à l'université, lorsque nous devions soumettre un devoir en informatique, nous devions effectuer une série d'étapes, y compris exécuter script, date, whoami, etc., puis exécuter notre programme.

La commande script permettait de rediriger tout le texte envoyé à l'écran vers à la fois l'écran et un fichier spécifié.

Depuis lors, j'ai cherché une version pour Dos et/ou Windows, mais je n'ai rien trouvé. Certains programmes peuvent être redirigés vers un fichier, mais l'écran n'est alors pas écho et certains programmes ne semblent pas fonctionner du tout avec la redirection.

Des idées ?


Éditer:

Jusqu'à présent, les réponses que j'ai obtenues semblent fonctionner exactement comme les commandes de redirection standard (<, >, |). Ces dernières ne fonctionnent pas avec tous les programmes. Par exemple, le compilateur Microsoft C++ CL.EXE. Si vous exécutez cl /? à travers une commande de redirection ou le faites passer par un autre programme (comme TEE), vous n'obtiendrez pas le texte d'en-tête/bannière.

Un autre exemple est un programme que j'ai écrit il y a un moment en Pascal (je pense que la dernière compilation était en FreePascal). Le texte d'aide n'est pas du tout redirigé. J'ai vu cela se produire également avec d'autres programmes comme MKISOFS. Il a un long texte d'aide, mais ne peut pas être mis en pause en le passant par MORE ou en le redirigeant vers un fichier !

Je me suis posé cette question depuis de nombreuses années. Je pensais autrefois que cela pouvait être dû au fait que le texte est écrit directement sur l'écran (par exemple, le port B800) ou quelque chose du genre, mais je n'ai pas encore trouvé la cause, encore moins trouvé un programme qui peut faire ce travail.

1voto

Alex Points 516

De nombreuses alternatives à CMD simplifient la vie à bien des égards, y compris en résolvant le problème que vous avez indiqué de la commande de script manquante. J'ai utilisé PowerCMD et il redirige la sortie vers son dossier de journal par défaut. Ainsi, en tant qu'utilisateur final, vous verrez les commandes telles que vous les tapez et les erreurs et la sortie des commandes tout en enregistrant simultanément tout votre travail dans un fichier journal.

Pour le configurer dans PowerCMD, allez dans Fichier --> Préférences --> Enregistrement automatique.

Extrait du fichier journal qui se remplit automatiquement alors que je travaille sur PowerCMD,

c:\Software\Microsoft\SysinternalsSuite>date
La date actuelle est : ven. 02/13/2015
Entrez la nouvelle date : (mm-jj-aa)
c:\Software\Microsoft\SysinternalsSuite>someBadCommand
'someBadCommand' n'est pas reconnu en tant que commande interne ou externe,
programme exécutable ou fichier de commandes par lots.

0voto

JdeBP Points 25711

C'est vraiment deux questions en une, une pour DOS et une pour Windows, même si la réponse est la même pour les deux.

Il est tout simplement impossible qu'un tel programme existe.

Il existe deux variantes de base de script sur les systèmes Unix et Linux. L'une (comme cette version Linux) utilise des tubes, l'autre (comme cette version HP/UX) utilise des pseudo-terminaux pour éviter les problèmes avec les programmes TUI qui présentent des interfaces en "plein écran" que l'approche des tubes a. Windows NT n'a tout simplement pas de mécanisme de pseudo-terminal. Il est tout simplement impossible de capturer l'E/S vers et depuis une console sur Windows NT comme avec les pseudo-terminaux sur les systèmes POSIX. On pourrait utiliser l'approche des tubes, mais …

  • … DOS n'a pas de mécanisme de tube. (Ne vous laissez pas tromper par ce que vous pouvez faire dans les interprètes de commandes DOS. Ce ne sont pas des tubes.)
  • … sur Windows NT, cela souffrira des problèmes — très similaires à ceux de l'approche des tubes sur les systèmes Unix et Linux — que …
    • … certains programmes reconnaîtront que leur sortie standard n'est pas une console et agiront différemment.
    • … d'autres programmes qui traitent le tube comme une console échoueront, car les périphériques de tube ne prennent pas en charge les appels système spécifiques à la console.

Cygwin repose sur la coopération des programmes cibles dans une prétention collective.

Vous vous demandez peut-être à propos de la commande script de Cygwin, et pourquoi elle a le comportement pas tout à fait correct avec les programmes non-Cygwin qu'elle a.

Cygwin tente d'émuler des pseudo-terminaux en utilisant des tubes Windows NT. Elle repose sur le fait que chaque programme Cygwin utilise une bibliothèque d'exécution Cygwin qui "sait" quand un tube est "vraiment" un pseudo-terminal, en utilisant des informations privées à la bibliothèque d'exécution Cygwin, et agit en conséquence. La fonction isatty() de la bibliothèque d'exécution dit "oui" quand l'exécution voit un tube qui est "vraiment" un pseudo-terminal Cygwin. Ainsi, les programmes Cygwin exécutés par le script de Cygwin agiront comme s'ils étaient connectés à des (pseudo-)terminaux.

Bien sûr, les programmes non-Cygwin, qui ne participent pas à cette illusion collective, verront simplement les tubes tels qu'ils sont vraiment, comme des tubes, et se comporteront comme ils le font lorsque leurs entrées/sorties/erreurs standard sont des tubes.

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