web-dev-qa-db-fra.com

Consignation de la sortie du script dans un fichier

J'ai écrit un script simple pour surveiller mes horloges gpu et temps. Je voulais que, en plus d’être visible sur le terminal, enregistre sa sortie sur un fichier externe. Comment pourrais-je y parvenir? Mon script ci-dessous, pour référence:

#!/bin/bash

watch -n 1 "amdconfig --odgc" "amdconfig --odgt"

La question n'est pas une copie parce que j'utilise la commande "watch".

4
Benjamim Linhares

Vous ne voulez vraiment pas faire ça. watch est conçu pour être surveillé (um) . Sa sortie est formatée de manière à rendre sa redirection peu pratique. Bien que vous puissiez le faire en utilisant quelque chose comme tee, le résultat sera beaucoup de lignes vides et très peu d’informations utiles.

Donc, dans le cas spécifique de watch, vous feriez mieux d'écrire votre propre petit script qui fait la même chose:

#!/bin/bash

## This is an infinite loop, the script will run until you kill it
while :; do
  ## Run the command whose output you want to monitor
  amdconfig --odgc" "amdconfig --odgt

  ## Wait for 2 seconds. This mimics what the watch command does
  ## and also avoids spamming your cpu. 
  sleep 2
done

Enregistrez ce script sous le nom ~/bin/amdwatch ou à votre convenance, rendez-le exécutable (chmod +x ~/bin/amdwatch), puis redirigez sa sortie vers un fichier:

~/bin/amdwatch > amdwatch.log 

Cela exécutera le script jusqu'à ce que vous l'arrêtiez manuellement et que vous exécutiez la commande amdwatch toutes les deux secondes, en enregistrant sa sortie sur amdwatch.log.

Pour la plupart des scripts, vous recherchez script.sh > outputFile.txt ou script.sh >> outputFile.txt. Voir Comment enregistrer la sortie du terminal dans un fichier? .

4
terdon

watch efface par défaut l'écran chaque fois qu'il est imprimé sur stdout. Je vous suggère donc d'utiliser un while loop avec un délai. Vous pouvez ensuite utiliser la commande script ou tee pour consigner le résultat. Par exemple,

while [ 1 ]; do df ; sleep 0.25; done | tee -a MY_FILE

Les deux seront affichés à l'écran et iront au fichier, en ajoutant chaque exécution de la commande

2
Sergiy Kolodyazhnyy