Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
2851 connectés 

 


Dernière réponse
Sujet : [shell]stack de commandes?
KevinTheProud Merci! [:dawacube]

Votre réponse
Nom d'utilisateur    Pour poster, vous devez être inscrit sur ce forum .... si ce n'est pas le cas, cliquez ici !
Le ton de votre message                        
                       
Votre réponse


[b][i][u][strike][spoiler][fixed][cpp][url][email][img][*]   
 
   [quote]
 

Options

 
Vous avez perdu votre mot de passe ?


Vue Rapide de la discussion
KevinTheProud Merci! [:dawacube]
serialcleaner 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.
serialcleaner 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

sorg 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.
serialcleaner

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.

arsunik 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 $?
minusplus 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
KevinTheProud dynamiquement
cycojesus 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
serialcleaner


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.

serialcleaner


 
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.

KevinTheProud

serialcleaner a écrit :

une sorte de batch live ?


 
Oui c'est ça

KevinTheProud


 
Il dit qu'il voit pas le lien.

serialcleaner une sorte de batch live ?
la viper le pipe :p
KevinTheProud 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.

Copyright © 1997-2025 Groupe LDLC (Signaler un contenu illicite / Données personnelles)