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