Problème script dans script [Shell] - Shell/Batch - Programmation
Marsh Posté le 10-11-2012 à 20:50:50
Bonjour,
trop d'inconnues:
quel shell ?
le fichier.tmp a été créé sur Windows ?
comment est-il créé?
que fait script2.sh?
comment prend-il ses arguments ?
Marsh Posté le 10-11-2012 à 22:14:28
c'est du bourne shell
non tout est sous linux, le début du premier script crée le fichier.tmp (qui s'appelle en fait video_list_recent.tmp) via
Code :
|
en fait, tout ça sert à récupérer des sous titres de vidéos (premier script) et à les intégrer à la vidéo avec mkvmerge (script2)
pour être plus précis l'appel à script2.sh se fait en
Code :
|
t'entends quoi exactement par "comment prend-il ses arguments"?
je copie colle pas mes scripts directement, car ils sont assez longs!
en tout cas, merci pour ton aide
Marsh Posté le 10-11-2012 à 23:23:04
"$film" sera perçu par le script2 comme un seul argument, et j'avais l'impression que la variable aurait pu contenir plusieurs noms.
tu fait deux find:
- un pour remplir un fichier temporaire
- un pour piper à grep un des noms trouvé par le premier find
?
tu ne peux pas ne faire qu'un seul find avec -exec ?
Code :
|
Marsh Posté le 11-11-2012 à 10:45:01
je me suis trompé sur mon copier/coller de la commande qui crée le fichier .tmp
c'est ça en fait :
Code :
|
donc le find ne s'applique pas sur les même types de fichiers
en gros, la logique de mes scripts, ça donne
1. je cherche les videos qui ont moins de 5 jours,
2. je cherche les sous titres pour ces vidéos,
3. j'ajoute les sous titres récupérés en 2. (d'où le find *.srt) aux vidéos correspondantes (-> find *.mkv | grep $titre)
d'ailleurs ça me fait penser que plutôt que faire un grep, je ferais peut être mieux de rajouter un " -iname "$titre" " dans mon find non?
(en effet, je ne suis pas programmeur de formation )
Marsh Posté le 11-11-2012 à 13:27:07
essayes comme ça:
Code :
|
parce que je ne connais pas la structure de répertoire $Videos.
a-t-il des sous-répertoires, ou tous les fichiers ne sont que sur un seul niveau (au quel cas, une boucle for ferait aussi bien) ?
Marsh Posté le 11-11-2012 à 22:28:31
non, il y a bien des sous répertoires dans $videos
je vais tester ta proposition!
edit: bon ben ça marche pas mieux...
en fait je suspecte un problème dans le script2.sh vu que sans l'option -f ça "marche" (càd que il se lance bien 2 fois, mais du coup, forcément, il ne déroule pas le même process sans l'option -f)
Marsh Posté le 12-11-2012 à 22:58:32
ganfoud a écrit : non, il y a bien des sous répertoires dans $videos |
Salut
Et t'as essayé de remplacer "script2.sh" par un simple "echo" ? Ou de mettre l'option "set -x" ? C'est quand-même la base du debug non ?
PS: test "var" != "" <=> test -n "$var"
Marsh Posté le 12-11-2012 à 23:14:23
Sve@r a écrit : |
bah oui bien sûr
en fait, j'ai continué à pousser les tests, et il semblerait que ce soit l'appel à mkvmerge dans mon script2.sh qui provoque le problème... si je le met en commentaire, ça passe toute les boucles
la commande en question (peut varier selon les cas mais l'idée est la même) :
Code :
|
c'est possible que ce soit un bug de mkvmerge qui provoque ce genre de chose?
Sve@r a écrit : Ou de mettre l'option "set -x" ? |
je ne sais pas ce que fait "set -x"
Sve@r a écrit : PS: test "var" != "" <=> test -n "$var" |
je ne savais pas!
Marsh Posté le 12-11-2012 à 23:21:20
ganfoud a écrit : je ne sais pas ce que fait "set -x" |
Ca active le mode "trace". Tout le code situé entre "set -x" et "set +x" est alors affiché lorsqu'il est exécuté (les variables sont remplacées par leur contenu).
Tu peux aussi appeler ton script en tapant "sh -x script". Ca lance alors le script dans un shell qui a l'option activée => chaque ligne du script est affichée au moment où elle s'exécute...
Marsh Posté le 13-11-2012 à 08:41:18
ah ben autre piste:
toujours dans mon script2.sh, j'ai ça:
Code :
|
et si je passe ces 2 lignes en commentaires, tout se déroule sans souci (même le mkvmerge précédent)
tout ça me laisse perplexe
Marsh Posté le 17-11-2012 à 13:20:32
bon j'ai trouvé, c'est bien la commande ssh qui posait problème:
en faisant un "ssh [...] &" ça marche!
Marsh Posté le 04-01-2013 à 17:33:39
Pour préciser, ca peux toujours servir :
Le SSH (tout comme le rsh d'ailleurs), prends l'entrée standard et la vide.
du coup, un code du style :
Code :
|
ne fera qu'une seule boucle car le ssh va "vider" le read.
Pour éviter ca, il faut ajouter l'option -n au ssh (ou au rsh). Extrait du man :
Citation : -n Redirects stdin from /dev/null (actually, prevents |
Marsh Posté le 04-01-2013 à 20:43:34
C'est bon à savoir
Le genre de bug qu'on peut mettre un moment à comprendre
Marsh Posté le 10-11-2012 à 20:20:11
Bonjour à tous
j'ai un problème et je suis en train de m'arracher les cheveux (déjà que j'en ai pas beaucoup! )
j'ai un script qui lance un autre script de cette façon:
(fichier.tmp contient une liste de fichiers)
et quand je fais ça, le script2.sh ne se lance qu'une seule fois au lieu des x fois de la boucle! et sans message d'erreur...
si je fais dans le terminal un "for ligne in ligne1 ligne2 ..." ça marche
qu'est ce qui pourrait provoquer que la boucle while s'arrête après la première itération?? c'est possible que le script2.sh provoque ça?