Executer un fichier sh
Résolu/Fermé
tht123
Messages postés
72
Date d'inscription
mardi 8 mai 2007
Statut
Membre
Dernière intervention
10 janvier 2009
-
29 mai 2007 à 23:31
tht123 Messages postés 72 Date d'inscription mardi 8 mai 2007 Statut Membre Dernière intervention 10 janvier 2009 - 1 juin 2007 à 10:44
tht123 Messages postés 72 Date d'inscription mardi 8 mai 2007 Statut Membre Dernière intervention 10 janvier 2009 - 1 juin 2007 à 10:44
A voir également:
- Executer un fichier .sh
- Fichier rar - Guide
- Comment ouvrir un fichier epub ? - Guide
- Comment réduire la taille d'un fichier - Guide
- Ouvrir un fichier .bin - Guide
- Comment ouvrir un fichier docx ? - Guide
13 réponses
ekra
Messages postés
1870
Date d'inscription
vendredi 15 avril 2005
Statut
Membre
Dernière intervention
24 juillet 2014
342
29 mai 2007 à 23:34
29 mai 2007 à 23:34
>line 71: syntax error near unexpected token `done'
>line 71: `done'< <<(cat $fichier)'
La réponse se trouve donc ligne 71.
Je crois que c'est << et non < <.
>line 71: `done'< <<(cat $fichier)'
La réponse se trouve donc ligne 71.
Je crois que c'est << et non < <.
jipicy
Messages postés
40842
Date d'inscription
jeudi 28 août 2003
Statut
Modérateur
Dernière intervention
10 août 2020
4 897
29 mai 2007 à 23:38
29 mai 2007 à 23:38
Salut,
Ton script est exécutable ?
Change ta dernière ligne par :
Ton script est exécutable ?
Change ta dernière ligne par :
done <$fichier;-))
tht123
Messages postés
72
Date d'inscription
mardi 8 mai 2007
Statut
Membre
Dernière intervention
10 janvier 2009
30 mai 2007 à 00:14
30 mai 2007 à 00:14
Hello,
même après modif:
>line 71: syntax error near unexpected token `done'
>line 71: `done'<cat $fichier'
hmhm
Merci et bonne nuit!
même après modif:
>line 71: syntax error near unexpected token `done'
>line 71: `done'<cat $fichier'
hmhm
Merci et bonne nuit!
jipicy
Messages postés
40842
Date d'inscription
jeudi 28 août 2003
Statut
Modérateur
Dernière intervention
10 août 2020
4 897
30 mai 2007 à 06:26
30 mai 2007 à 06:26
Ben essaie de coder le nom du fichier en dur, commente la ligne et remplace-la par:
#done <$fichier
done < le_nom_du_fichier.quelque_chose
et remplace chaque instance de "$fichier" par le nom réel du fichier...
C'est qu'elle version de bash sous Cygwin ?
==> ekra => Non, la syntaxe est la bonne "< <(commande ...)"
#done <$fichier
done < le_nom_du_fichier.quelque_chose
et remplace chaque instance de "$fichier" par le nom réel du fichier...
C'est qu'elle version de bash sous Cygwin ?
==> ekra => Non, la syntaxe est la bonne "< <(commande ...)"
ekra
Messages postés
1870
Date d'inscription
vendredi 15 avril 2005
Statut
Membre
Dernière intervention
24 juillet 2014
342
31 mai 2007 à 13:17
31 mai 2007 à 13:17
Ok, désolé :)
Il faut que je m'y remette un peu !
Il faut que je m'y remette un peu !
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
tht123
Messages postés
72
Date d'inscription
mardi 8 mai 2007
Statut
Membre
Dernière intervention
10 janvier 2009
30 mai 2007 à 10:08
30 mai 2007 à 10:08
Bonjour,
Si j'essaie avec en premiere ligne : #! /bin/bash ou #! /bin/sh
ça foire, j'ai en retour :
tht@WS-CH183 /cygdrive/c/cygwin/bin
$ tht.sh fich01.txt
: No such file or directoryin/bash
/usr/bin/tht.sh: line 12: syntax error near unexpected token 'done'
/usr/bin/tht.sh: line 12: `done < <(cat fich01.txt)'
En déclarant le fichier explicitement:
#! /bin/bash
#! /bin/sh
fichier="fich01.txt"
while read line
do
var=$(echo "$line" | sed 's/.\{332\}\(.\{60\}\).*/\1/')
while [ $(grep -o "$var" <<<"$line" | wc -l) -gt "1" ]
do
sed -i '/'"$var"'/ s///2' "fich01.txt"
line=$(sed -n '/'"$var"'/p' "fich01.txt")
done
done < <(cat fich01.txt)
J AI en retour :
/usr/bin/tht.sh: line 12: syntax error near unexpected token 'done'
/usr/bin/tht.sh: line 12: `done < <(cat fich01.txt)'
Si j'essaie avec en premiere ligne : #! /bin/bash ou #! /bin/sh
ça foire, j'ai en retour :
tht@WS-CH183 /cygdrive/c/cygwin/bin
$ tht.sh fich01.txt
: No such file or directoryin/bash
/usr/bin/tht.sh: line 12: syntax error near unexpected token 'done'
/usr/bin/tht.sh: line 12: `done < <(cat fich01.txt)'
En déclarant le fichier explicitement:
#! /bin/bash
#! /bin/sh
fichier="fich01.txt"
while read line
do
var=$(echo "$line" | sed 's/.\{332\}\(.\{60\}\).*/\1/')
while [ $(grep -o "$var" <<<"$line" | wc -l) -gt "1" ]
do
sed -i '/'"$var"'/ s///2' "fich01.txt"
line=$(sed -n '/'"$var"'/p' "fich01.txt")
done
done < <(cat fich01.txt)
J AI en retour :
/usr/bin/tht.sh: line 12: syntax error near unexpected token 'done'
/usr/bin/tht.sh: line 12: `done < <(cat fich01.txt)'
jipicy
Messages postés
40842
Date d'inscription
jeudi 28 août 2003
Statut
Modérateur
Dernière intervention
10 août 2020
4 897
30 mai 2007 à 10:38
30 mai 2007 à 10:38
En déclarant le fichier explicitement, ta ligne doit ressembler à :
done < fich01.txt;-)
tht123
Messages postés
72
Date d'inscription
mardi 8 mai 2007
Statut
Membre
Dernière intervention
10 janvier 2009
31 mai 2007 à 08:29
31 mai 2007 à 08:29
Hello,
un grand merci de votre aide mais ça ne va guerre mieu...
Tiens cette regex :
's/.\{332\}\(.\{60\}\).*/\1/
1) .\{332\}\(.\{60\}\).*
==> Lecture de la chaine de caractère comprise entre 332 et 392??
2) \1 : heu??
BAV
un grand merci de votre aide mais ça ne va guerre mieu...
Tiens cette regex :
's/.\{332\}\(.\{60\}\).*/\1/
1) .\{332\}\(.\{60\}\).*
==> Lecture de la chaine de caractère comprise entre 332 et 392??
2) \1 : heu??
BAV
jipicy
Messages postés
40842
Date d'inscription
jeudi 28 août 2003
Statut
Modérateur
Dernière intervention
10 août 2020
4 897
31 mai 2007 à 08:59
31 mai 2007 à 08:59
Salut,
2) \1 : heu??
N'affiche que le contenu entre parenthèses, autrement dit dans ton cas, à partir du 333 ème caractères affiche les 60 caractères suivants.
Si une autre sous-expression entre parenthèse avait été présente, on l'aurait désignée avec le numéro 2.
Exemple :
2) \1 : heu??
N'affiche que le contenu entre parenthèses, autrement dit dans ton cas, à partir du 333 ème caractères affiche les 60 caractères suivants.
Si une autre sous-expression entre parenthèse avait été présente, on l'aurait désignée avec le numéro 2.
Exemple :
echo "Un,deux,trois" | sed 's/\(.*\),\(.*\),\(.*\)/\3:\1:\2/' trois:Un:deux;-))
tht123
Messages postés
72
Date d'inscription
mardi 8 mai 2007
Statut
Membre
Dernière intervention
10 janvier 2009
31 mai 2007 à 09:05
31 mai 2007 à 09:05
Merci jipicy!!!
Bonne journée.
Bonne journée.
jipicy
Messages postés
40842
Date d'inscription
jeudi 28 août 2003
Statut
Modérateur
Dernière intervention
10 août 2020
4 897
31 mai 2007 à 09:57
31 mai 2007 à 09:57
Bon, je reviens à la charge pour régler ton problème n°1...
Je te colle ci-après un fichier "fich01.txt" de référence avec le programme "tht123.sh".
Copie/colle ces 2 fichiers dans un répertoire temporaire vide, fais une copie de "fich01.txt", rend le programme (tht123.sh) exécutable et lance-le par "./tht123.sh".
Normalement tu devrais obtenir le résultat qui suit :
Je te colle ci-après un fichier "fich01.txt" de référence avec le programme "tht123.sh".
Copie/colle ces 2 fichiers dans un répertoire temporaire vide, fais une copie de "fich01.txt", rend le programme (tht123.sh) exécutable et lance-le par "./tht123.sh".
Normalement tu devrais obtenir le résultat qui suit :
[jp@MDK tmpfs]$ ls -l total 12 -rw-rw-r-- 1 jp jp 456 mai 31 09:45 fich01.txt -rw-r--r-- 1 jp jp 456 mai 31 09:49 old_fich01.txt -rwxrwxr-x 1 jp jp 250 mai 31 09:48 tht123.sh* [jp@MDK tmpfs]$ cat fich01.txt Champ ref : 001 ABC de la phrase. Champ ref : 001 ABC de la phrase. Champ ref : 001 ABC de la phrase. Champ ref : 001 ABC de la phrase. Champ ref : 002 DEF de la phrase. Champ ref : 002 DEF de la phrase. Champ ref : 002 DEF de la phrase. Champ ref : 002 DEF de la phrase. Champ ref : 003 GHI de la phrase. Champ ref : 003 GHI de la phrase. Champ ref : 003 GHI de la phrase. Champ ref : 003 GHI de la phrase. [jp@MDK tmpfs]$ cat tht123.sh #! /bin/bash while read line do var=$(echo "$line" | sed 's/.\{6\}\(.\{18\}\).*/\1/') while [ $(grep -o "$var" <<<"$line" | wc -l) -gt "1" ] do sed -i '/'"$var"'/ s///2' "fich01.txt" line=$(sed -n '/'"$var"'/p' "fich01.txt") done done < fich01.txt [jp@MDK tmpfs]$ ./tht123.sh [jp@MDK tmpfs]$ cat fich01.txt Champ ref : 001 ABC de la phrase. Champ de la phrase. Champ de la phrase. Champ de la phrase. Champ ref : 002 DEF de la phrase. Champ de la phrase. Champ de la phrase. Champ de la phrase. Champ ref : 003 GHI de la phrase. Champ de la phrase. Champ de la phrase. Champ de la phrase. [jp@MDK tmpfs]$;-))
tht123
Messages postés
72
Date d'inscription
mardi 8 mai 2007
Statut
Membre
Dernière intervention
10 janvier 2009
31 mai 2007 à 13:58
31 mai 2007 à 13:58
Salut,
Si ça fonctionnait chez moi se serait top mais...
Jette un oeil si tu souhaites:
Le lien a été créé: https://www.cjoint.com/?fFn3h2hnZ2
N'existerait-il pas un patch pour cygwin??
D'autre part, j'ai même essayé sous dos de lancer la commande :
tht123.sh fichier01.txt et là surprise le fichier tht123.sh s'ouvre dans notepad??????
Qu'en dis tu?
BAT
Si ça fonctionnait chez moi se serait top mais...
Jette un oeil si tu souhaites:
Le lien a été créé: https://www.cjoint.com/?fFn3h2hnZ2
N'existerait-il pas un patch pour cygwin??
D'autre part, j'ai même essayé sous dos de lancer la commande :
tht123.sh fichier01.txt et là surprise le fichier tht123.sh s'ouvre dans notepad??????
Qu'en dis tu?
BAT
jipicy
Messages postés
40842
Date d'inscription
jeudi 28 août 2003
Statut
Modérateur
Dernière intervention
10 août 2020
4 897
31 mai 2007 à 14:54
31 mai 2007 à 14:54
Bon je crois avoir trouvé d'où viens le problème, c'est le caractère "retour chariot" propre aux systèmes MS-DOS (Windows par extension).
Pour t'en convaincre affiche ton fichier en te servant du paramètre "-v" de la commande "cat" :
;-))
Pour t'en convaincre affiche ton fichier en te servant du paramètre "-v" de la commande "cat" :
cat -v tht123.shTu devrais obtenir un résultat du genre :
#! /bin/bash^M while read line^M do^M var=$(echo "$line" | sed 's/.\{6\}\(.\{18\}\).*/\1/')^M while [ $(grep -o "$var" <<<"$line" | wc -l) -gt "1" ]^M do^M sed -i '/'"$var"'/ s///2' "fich01.txt"^M line=$(sed -n '/'"$var"'/p' "fich01.txt")^M done^M done < fich01.txt^MDonc dans un 1er temps il faut que tu convertisses ton fichier exécutable comme suit :
sed -i.bak 's/\r$//' tht123.shSi la notation "\r" ne marche pas, essaie :
sed 's/^M//' tht123.shLe caractère "^M", s'obtient par la séquence de touches suivante "CTRL-V" + "CTRL-M". Voir à ce sujet : sed conversion retours chariots dos crlf unix lf
;-))
tht123
Messages postés
72
Date d'inscription
mardi 8 mai 2007
Statut
Membre
Dernière intervention
10 janvier 2009
31 mai 2007 à 19:29
31 mai 2007 à 19:29
Hello,
ici j'ai un problème bizzare:
Après avoir lancé la commande : ./tht123.sh
J'ai une volée de mesage à la queuleuleu:
sed : cannot rename .sedXXXXXXX : Permission denied
où XXXXXX varie d'une ligne à l'aitre je suis obligé de quitter avec ctrl+break pour revenir au prompt!!!???
BAT
ici j'ai un problème bizzare:
Après avoir lancé la commande : ./tht123.sh
J'ai une volée de mesage à la queuleuleu:
sed : cannot rename .sedXXXXXXX : Permission denied
où XXXXXX varie d'une ligne à l'aitre je suis obligé de quitter avec ctrl+break pour revenir au prompt!!!???
BAT
tht123
Messages postés
72
Date d'inscription
mardi 8 mai 2007
Statut
Membre
Dernière intervention
10 janvier 2009
31 mai 2007 à 20:50
31 mai 2007 à 20:50
voici les erreur que j'ai:
Le lien a été créé:
https://www.cjoint.com/?fFuWUFjhOw
BAT
Le lien a été créé:
https://www.cjoint.com/?fFuWUFjhOw
BAT
jipicy
Messages postés
40842
Date d'inscription
jeudi 28 août 2003
Statut
Modérateur
Dernière intervention
10 août 2020
4 897
1 juin 2007 à 08:12
1 juin 2007 à 08:12
Je n'en sais rien pourquoi ça te fais ça !!!
Lance le script en mode "débogage", rajoute la ligne "set -xv" en début de script, on en saura peut être un peu plus... :
PS. Pour les liens "cjoint", ne me mets pas des fichiers ".doc", mets tes captures d'écran directe (images). Merci.
Lance le script en mode "débogage", rajoute la ligne "set -xv" en début de script, on en saura peut être un peu plus... :
#! /bin/bash set -xv while read line do...Au pire, essaie aussi de changer cette ligne :
while [ $(grep -o "$var" <<<"$line" | wc -l) -gt "1" ]par :
while [ $(echo "$line" | grep -o "$var" | wc -l) -gt "1" ]C'est pas dit que ça change quoi que ce soit, mais vu que Cygwin fait des caprices.
PS. Pour les liens "cjoint", ne me mets pas des fichiers ".doc", mets tes captures d'écran directe (images). Merci.
tht123
Messages postés
72
Date d'inscription
mardi 8 mai 2007
Statut
Membre
Dernière intervention
10 janvier 2009
1 juin 2007 à 10:44
1 juin 2007 à 10:44
Bonjour,
Maintenant ça fonctionne, mais voilà pourquoi:
Initialement j'ai découvert la suite core utils qui reprend une suite d'utilitaires linux :
http://gnuwin32.sourceforge.net/packages/coreutils.htm
Avec laquelle ça allait pas trop mal en commandant directement depuis le DOS, mais il n'y a pas tous les outils! nottament le shell!!!
Alors j'ai tenté la migration sous CYGWIN et en reprenant depuis le début : SOIT POUR LE POST DE HAUT DE PAGE C'EST OK!
Voilà comment j'ai procédé pour les intéressé(e)s :
1) création du fichier .sh au format unix, soit il faut appliquer la commande : sed -i.bak 's/\r$//' tht123.sh
2) Executer : ./tht123.sh
########################################
#tht123.sh
#! /bin/bash
fichier="$1"
while read line
do
var=$(echo "$line" | sed 's/.\{332\}\(.\{60\}\).*/\1/')
while [ $(grep -o "$var" <<<"$line" | wc -l) -gt "1" ]
do
sed -i '/'"$var"'/ s///2' "$fichier"
line=$(sed -n '/'"$var"'/p' "$fichier")
done
done < <(cat $fichier)
########################################
Mais le script relatif à mon post 14 donne toujours le même genre d'erreurs, bon ça va puisque le problème initial est résolu.
VOILA, alors bien merci à tous.
Maintenant ça fonctionne, mais voilà pourquoi:
Initialement j'ai découvert la suite core utils qui reprend une suite d'utilitaires linux :
http://gnuwin32.sourceforge.net/packages/coreutils.htm
Avec laquelle ça allait pas trop mal en commandant directement depuis le DOS, mais il n'y a pas tous les outils! nottament le shell!!!
Alors j'ai tenté la migration sous CYGWIN et en reprenant depuis le début : SOIT POUR LE POST DE HAUT DE PAGE C'EST OK!
Voilà comment j'ai procédé pour les intéressé(e)s :
1) création du fichier .sh au format unix, soit il faut appliquer la commande : sed -i.bak 's/\r$//' tht123.sh
2) Executer : ./tht123.sh
########################################
#tht123.sh
#! /bin/bash
fichier="$1"
while read line
do
var=$(echo "$line" | sed 's/.\{332\}\(.\{60\}\).*/\1/')
while [ $(grep -o "$var" <<<"$line" | wc -l) -gt "1" ]
do
sed -i '/'"$var"'/ s///2' "$fichier"
line=$(sed -n '/'"$var"'/p' "$fichier")
done
done < <(cat $fichier)
########################################
Mais le script relatif à mon post 14 donne toujours le même genre d'erreurs, bon ça va puisque le problème initial est résolu.
VOILA, alors bien merci à tous.