[shell]stack de commandes?

stack de commandes? [shell] - Linux et OS Alternatifs

Marsh Posté le 14-06-2004 à 10:15:29    

Bonjour,
 
j'aimerai savoir si il existe une commande qui permet de gérer une pile de  commande à exécuter. Par exemple on exécute la première commande, quand celle-ci à finit de s'excuter la commande suivante dans la pile prend le relai...
Le but ici est de pouvoir rajouter ou enlever des entrées à la pile dynamiquement.

Reply

Marsh Posté le 14-06-2004 à 10:15:29   

Reply

Marsh Posté le 14-06-2004 à 10:57:53    

le pipe :p

Reply

Marsh Posté le 14-06-2004 à 11:00:40    

une sorte de batch live ?


---------------
Un bon script vaut tous les clicks du monde. | Errements Alternatifs
Reply

Marsh Posté le 14-06-2004 à 11:11:41    


 
Il dit qu'il voit pas le lien.

Reply

Marsh Posté le 14-06-2004 à 11:11:54    

serialcleaner a écrit :

une sorte de batch live ?


 
Oui c'est ça

Reply

Marsh Posté le 14-06-2004 à 11:31:13    


 
Je ne sais pas si les shells intègre ce genre de pile, je pense qu'il serait nécessaire de faire un tour sur les man de bash, csh, zsh(mon préféré). Toutes les fois où j'ai parcouru ces man je n'ai rien vu de semblables. En revanche il y a peut-être à creuser du coté de zsh car on peut définir des fonctions qui permettrait de faire ce que tu veux.


---------------
Un bon script vaut tous les clicks du monde. | Errements Alternatifs
Reply

Marsh Posté le 14-06-2004 à 12:38:35    


Le truc le plus facile à faire serait d'utiliser un script qui scrute une la file d'attente des commandes dans un fichier toutes les 2 secondes environ.
Ensuite l'écriture dans cette file peut se faire (avec zsh, je ne customise que lui) en bindant une fonction sur un raccourci clavier qui prend la ligne de commande courante en l'envoie dans la file.
C'est pas du full-shell mais ça peut se faire facilement.


---------------
Un bon script vaut tous les clicks du monde. | Errements Alternatifs
Reply

Marsh Posté le 14-06-2004 à 13:20:40    

commande 1 && commande 2 && commande 3 && ...
 
le && conditionne l'éxécution de la deuxième commande sur le succès de la première
 
EDIT : y'a aussi le ||
 
EDIT2 : man bash ligne 238


Message édité par cycojesus le 14-06-2004 à 13:23:03

---------------
Chết rồi ! ✍ ⌥⌘ http://github.com/gwenhael-le-moine/slackbuilds/
Reply

Marsh Posté le 14-06-2004 à 13:44:52    

dynamiquement

Reply

Marsh Posté le 14-06-2004 à 14:07:36    

faudrait faire un fifo, lancer un shell qui le scrute et qui exécute les commandes séquantiellement si il y en a. Après y'a plus qu'à écrire les comandes dans le fifo...
 
heu j'ai pas testé bien sûr hein... :o :D

Reply

Marsh Posté le 14-06-2004 à 14:07:36   

Reply

Marsh Posté le 14-06-2004 à 14:10:53    

tu peux gèrer ça avec un tableau en bash, ou avec une seule variable (en séparant les commandes par des sauts de ligne par exemple, tu peux gérer cette variable avec sed par exemple).
ensuite, tu lances les commandes avec une boucle et des eval.
pour ce qui est de la modification de la pile pendant l'exécution de la boucle, je ne vois pas ce que tu veux faire exactement.
Tu peux interrompre le script à tout moment avec des signaux (man kill, help trap) ou bidouiller en lançant des processus fils avec des pipes et en lisant la valeur de retour avec $?

Reply

Marsh Posté le 14-06-2004 à 14:50:46    

minusplus a écrit :

faudrait faire un fifo, lancer un shell qui le scrute et qui exécute les commandes séquantiellement si il y en a. Après y'a plus qu'à écrire les comandes dans le fifo...
 
heu j'ai pas testé bien sûr hein... :o :D


 
Pas idiot le coup des FIFOs, à voir.


---------------
Un bon script vaut tous les clicks du monde. | Errements Alternatifs
Reply

Marsh Posté le 14-06-2004 à 18:58:00    

Ben chez moi si je tape une commande pendant l'execution d'une autre , elle est executer à la fin.
 
exemple:
jhe fait un  
wget www.bidule.com/groslolo.zip
 
Là ca downloade pendant plusieurs minute.... et je tape avant la fin:
 
unzip groslolo.zip
 
et la commande  s'execute dès la fin du download.

Reply

Marsh Posté le 15-06-2004 à 14:03:05    

Voici un petit script :
 

#! /bin/sh
# A lancé en arrière plan et de préference avec une redirection de la sortie standard vers un fichier pour conserver les logs des processus
 
if ! test -e "$HOME/.FIFO-batch-live-input";
then
 echo "Création de $HOME/.FIFO-batch-live-input"
 mkfifo $HOME/.FIFO-batch-live-input
 if ! test -e "$HOME/.FIFO-batch-live-output";
 then
  echo "Création de $HOME/.FIFO-batch-live-output"
  #mkfifo $HOME/.FIFO-batch-live-output
  touch $HOME/.FIFO-batch-live-output
 else
  if ! test -p "$HOME/.FIFO-batch-live-output";
         then
                 echo "Ne peut pas mettre en place le tube nommé nécessaire : $HOME/.FIFO-batch-live-output"
                 exit 0
  fi
 fi
else
 if ! test -p "$HOME/.FIFO-batch-live-input";
 then
  echo "Ne peut pas mettre en place le tube nommé nécessaire : $HOME/.FIFO-batch-live-input"
  exit 0
 fi  
fi
while test -e /bin/bash;
do
 COMMAND=`cat $HOME/.FIFO-batch-live-input`
 BIN=$(echo $COMMAND | cut -d" " -f1)
 ARGS=$(echo $COMMAND | cut -d" " -f2-)
 export ID=$RANDOM
 if [ "$BIN" != "exit" ];
 then
  echo "= Commande : $COMMAND ID:$ID $(date "+%D-%H:%M:%S" )"
  echo "=== Sortie : ID:$ID"
  $(echo $COMMAND) | sed -r "s/(.*)/$ID:\1/"
  echo "=== Fin : $COMMAND {$?} ID:$ID $(date "+%D-%H:%M:%S" )"
  echo
  echo "$(date "+%D-%H:%M:%S" ) $COMMAND {$?}" >> $HOME/.FIFO-batch-live-output # bloquant si c'est un tube
 fi  
done


 
Pour lui envoyer des commandes :


echo "la commande" >> $HOME/.FIFO-batch-live-input


Message édité par serialcleaner le 15-06-2004 à 14:03:53

---------------
Un bon script vaut tous les clicks du monde. | Errements Alternatifs
Reply

Marsh Posté le 15-06-2004 à 15:53:28    

Petit problème détecté si la commande précédente n'a pas terminé alors l'envoi sur le tube input est bloquant.
Je vais changer ça.


---------------
Un bon script vaut tous les clicks du monde. | Errements Alternatifs
Reply

Marsh Posté le 16-06-2004 à 20:45:04    

Merci! [:dawacube]

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed