gnu@robby:~/faust2.0/voice$ sh faustus2.sh
# execute un random dans l'interval(%) `ls *ogg | wc -l`
line=$(($RANDOM%`ls *wav | wc -l`))
+ ls test.wav test2.wav test3.wav test4.wav test5.wav
+ wc -l
faustus2.sh: 8: arithmetic expression: expecting primary: "%5"
gnu@robby:~/faust2.0/voice$ cat faustus2.sh
#!/bin/bash
#SCRIPT PLAY OGG
set -xv
# execute un random dans l'interval(%) `ls *ogg | wc -l`
line=$(($RANDOM%`ls *wav | wc -l`))
# ajoute une ligne car nl compte à partir de 1
line=$((line + 1))
# echo $?
SERVICE='gnash'
while ps ax | grep -v grep | grep $SERVICE > /dev/null
do
# execute un random dans l'interval(%) `ls *ogg | wc -l`
line=$(($RANDOM%`ls *wav | wc -l`))
# ajoute une ligne car nl compte à partir de 1
line=$((line + 1))
ls *wav | nl | while read a b
do
[ "$a" = "$line" ] && { /usr/bin/play "$b" ; }
done
done
Forum Programmation.shell script bash , OK sous ubuntu 7.10 mais KO sous ubuntu 8.04
voila j'ai modifié un petit script , il se lance sans problème sous gusty mais sous hardy il me retourne une erreur incompréhensible . Quelqu'un peut m'expliquer ?
# Ce n'est pas bash
Posté par Octabrain . Évalué à 5.
Explication plus longue :
- La première ligne de ton script (le shebang) indique l'interpréteur à exécuter en cas de "./faustus2.sh". Mais dans ton exemple, tu le passes en paramètre d'une commande, qui ne tiendra donc pas compte du shebang.
- /bin/sh est bien souvent un lien symbolique vers un autre shell, fut-ce bash, zsh, dash, ou autre (ce lien est configurable). Il me semble qu'Ubuntu a changé récemment et le lien ne pointe plus par défaut vers bash (un shell avec pas mal de fonctions), mais vers dash (un shell avec juste le strict nécessaire à la norme, plus rapide) qui ne supporte pas $RANDOM.
[^] # Re: Ce n'est pas bash
Posté par eastwind☯ . Évalué à 1.
pourquoi ils l'ont pas dit (ou c'est moi qui n'ai pas vue passer l'info ? )
pourquoi ils l'ont changé ?
Comment on fait pour revenir a l'environnement normal tel que la plupart des distros la connaissent et tel que sous ubuntu 7.10 ?
Je commence à sentir sérieusement les limites de Dash
[^] # Re: Ce n'est pas bash
Posté par 태 (site web personnel) . Évalué à 2.
>> dash (un shell avec juste le strict nécessaire à la norme, plus rapide)
> Comment on fait pour revenir a l'environnement normal tel que la plupart des distros la connaissent et tel que sous ubuntu 7.10 ?
Probablement en faisant un update-alternatives. Genre 'sudo update-alternatives --config sh'.
Mais de toute façon, si tu tiens à utiliser bash, lance ton script en faisant 'bash faustus.sh'. Si par contre tu veux utiliser sh, n'utilise pas de constructions qui ne sont pas dans la norme.
[^] # Re: Ce n'est pas bash
Posté par eastwind☯ . Évalué à 1.
[^] # Re: Ce n'est pas bash
Posté par Unixfix le Gaulois . Évalué à 4.
Les mainteneurs d'Ubuntu ont visiblement suivi, même si dans le cas d'Ubuntu l'embarqué n'est pas la cible principale. D'autre part visiblement l'utilisateur "standard" d'Ubuntu n'utilise pas la ligne de commande voire ne fait ses propres scripts.
Personnellement je tiens compte dans mes scripts perso de cet état de fait et j'ai remplacé #!/bin/sh par #!/bin/bash dans la première ligne de mes scripts et je n'ai pas de problème!
[^] # Re: Ce n'est pas bash
Posté par eastwind☯ . Évalué à 1.
gnu@robby:~/FAU$T.2.0/voice$ sudo update-alternatives --config sh
[sudo] password for gnu:
Pas d'alternatives pour sh.
[^] # Re: Ce n'est pas bash
Posté par Unixfix le Gaulois . Évalué à 2.
[^] # Re: Ce n'est pas bash
Posté par tatrefthekiller . Évalué à 1.
Par contre, si je regarde ton "cat" je vois qu'une ligne est sautée au début du fichier. Est-ce que la ligne #!/bin/bash est bien la PREMIÈRE ligne du fichier ?
Si oui, tu dois pouvoir exécuter ton script avec ./mon_script : bash sera appelé automatiquement.
# Merci , ca marche
Posté par eastwind☯ . Évalué à 2.
Le script pour ceux que ca peut servir ,
1.il cherche aléatoirement dans son répertoire un fichier *swf (si quelqu'un onnais un bon outil libre pour convertir du swf en format vidéo , pyvnc edit.py ne marche pas chez moi ) avec gnash en plein écran , une seule fois ,
2. vérifie que le processus est lancé (ici gnash ) si oui alors lis aléatoirement des .wav tant que gnash est ouvert . Peut servir dans un contexte d'art numérique et autre multimédia .
#!/bin/bash
set -xv
killall python
line=$(($RANDOM%`ls *.swf | wc -l`))
line=$(($line + 1))
ls *.swf | nl | if read a b
then
#[ "$a" = "$line" ] && { /usr/bin/gnash "$b" & }
[ "$a" = "$line" ] && { /usr/bin/gnash --once --fullscreen -r 1 "$b" & }
fi
SERVICE='gnash'
while ps ax | grep -v grep | grep $SERVICE > /dev/null
do
# execute un random dans l'interval(%) `ls *ogg | wc -l`
line=$(($RANDOM%`ls *wav | wc -l`))
# ajoute une ligne car nl compte à partir de 1
line=$((line + 1))
ls *wav | nl | while read a b
do
[ "$a" = "$line" ] && { /usr/bin/play "$b" ; }
done
done
[^] # Re: Merci , ca marche
Posté par 태 (site web personnel) . Évalué à 2.
RANDOM=$(dd if=/dev/urandom count=1 2> /dev/null | cksum | cut -f1 -d" ")
dans le script et ça marchera sur tous les systèmes ayant un /dev/urandom (c'est peut-être moins fréquent que bash cependant).Suivre le flux des commentaires
Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.