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".
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? .
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