[Bash] Problème de variable... HELP!

Thireus

Membre enregistré
14 Avril 2007
9
0
Bonjour à tous,

J'ai besoin d'aide en Bash. J'aimerais savoir comment faire pour récupérer ce que renvoie un script qui tourne en permanence en echo et stocker les nouvelles entrées dans une variable.

Par exemple:

Bloc de code:
sudo iotop -t 0 -C 3 | grep "load: "

Ce que je voudrais c'est récupérer les nouvelles lignes qui s'ajoutent en permanence. NE PAS STOCKER DANS UN FICHIER!!! Mais les récupérer en tant que variable et utilisable depuis une autre fenêtre du terminal. Et surtout sans stopper l'opération iotop, en gros boucle interdite, iotop se lance qu'une seule fois et basta.

Quelqu'un a une idée?
 
Ok voici le code:

Bloc de code:
sudo iotop -t 0 -C 3 | grep "load: " | script.sh

script.sh:

Bloc de code:
#!/bin/sh

  while read data
  do
      echo "[$(date +"%D %T")] $data" >> log_activity.txt
  done

Mais rien n'est lu :(

Une idée?
 
utilise un fifo. man mkfifo

j'ai vu un article passer dans mes flux rss y a pas longtemps qui en parlait avec un exemple. Attend je te retrouve ça et je reviens.

EDIT : http://maratux.blogspot.com/2009/06/named-pipes-or-how-to-get-two-separate.html :)

Edit sinon y a plus simple en fait, un truc du genre :
Bloc de code:
(sudo iotop -t 0 -C 3 | grep "load: " >>FILE)& ; tail -f FILE | script.sh
 
  • J’aime
Réactions: TibomonG4 et Mobyduck
utilise un fifo. man mkfifo

j'ai vu un article passer dans mes flux rss y a pas longtemps qui en parlait avec un exemple. Attend je te retrouve ça et je reviens.

EDIT : http://maratux.blogspot.com/2009/06/named-pipes-or-how-to-get-two-separate.html :)

Edit sinon y a plus simple en fait, un truc du genre :
Bloc de code:
(sudo iotop -t 0 -C 3 | grep "load: " >>FILE)& ; tail -f FILE | script.sh

Il ne faut pas que cette variable soit stocké sur le disque dur :(

NE PAS STOCKER DANS UN FICHIER!!!
C'est bien ce que fait ton truc du genre non? Je regarde pour le lien ;)

---------- Nouveau message ajouté à 14h52 ---------- Le message précédent a été envoyé à 13h32 ----------

Aussi étrange que celà puisse paraître, mkfifo n'envoie pas le output sur le disque :mouais: Quelqu'un peut confirmer?

Je vais donc essayer de voir si je peux tirer qqc de ce fifo ;)

Merci pour l'astuce et dsl pour mon précédent post.

---------- Nouveau message ajouté à 16h40 ---------- Le message précédent a été envoyé à 14h52 ----------

RÉSOLU!!!

Bloc de code:
...
iotop -t 0 -C 3 | grep "load: " --line-buffered |  while read data
do
    echo "${data}"
    #Do whatever you want with ${data} here :)
done
...

:)

fifo marchait aussi ;)
 
BonjourEst-ce bien résolu de cette manière ? J'en doute... La variable "data" d'une fenêtre ne doit pas être accessible depuis une autre fenêtre.

Sisi avec la méthode pipe mkfifo :)

Mais cette méthode ne m'interesse plus. Puisque maintenant je peux faire ce que je veux depuis une unique fenêtre, à savoir:

Bloc de code:
J'aimerais savoir comment faire pour récupérer ce que renvoie un script qui tourne en permanence en echo et stocker les nouvelles entrées dans une variable.
En fait c'était juste le --line-buffered qu'il me fallait :)

Sans ça impossible de récupérer en permanence ce que renvoie iotop ;)

---------- Nouveau message ajouté à 17h13 ---------- Le message précédent a été envoyé à 17h07 ----------

Si ça t'intéresse PA5CAL, il suffit de faire:

Bloc de code:
mkfifo my_pipe

Puis rajouter dans le while que j'ai donné précédement, où j'ai dit que j'avais résolu le problème:

Bloc de code:
echo "${data}" > my_fifo

Puis depuis une autre fenêtre on fait:

Bloc de code:
cat my_fifo

Avec une petite boucle while pour récup à chaque fois les valeurs
Et voilou ;)