Je suis bloqué avec mon script bash avec array pour l'option de commande.Sortie de tableau pour l'option de commande dans le script bash
Je fais un script bash pour extraire les pièces jointes du fichier mkv, et à la fin fusionner à nouveau les pièces jointes au fichier mkv après le codage vidéo/audio.
C'est pour la fixation d'extrait
#find the total of attachment
A=$(mkvmerge -i input.mkv | grep -i attachment
| awk '{printf $3 "\n"}'
| sed 's;\:;;'
| awk 'END { print NR }')
#extract it
for ((i=1; i<=$A; i++))
do
font[${i}]="$(mkvmerge -i input.mkv | grep -i attachment
| awk '{for (i=11; i <= NF; i++) printf($i"%c" , (i==NF)?ORS:OFS) }'
| sed "s/'//g"
| awk "NR==$i")"
mkvextract attachments input.mkv $i:"${font[${i}]}"
done
Et maintenant, pour la fusion à nouveau l'attachement
for ((i=1; i<=$A; i++))
do
#seach for space between file name and and '\' before
#the space because some attachment has space in filename
font1[${i}]=$(echo ${font[${i}]} | sed 's/ /\\ /g')
#make option for add attachment
attachment[${i}]=$"--attach-file ${font1[${i}]}"
done
mkvmerge -o output.mkv -d 1 -S test.mp4 sub.ass ${attachment[*]}
Le problème, peut toujours pas pour le nom de fichier avec l'espace. Quand j'ai essayé écho le ${attachment[*]}
, il semble bien
--attach-file Beach.ttf --attach-file Candara.ttf
--attach-file CASUCM.TTF
--attach-file Complete\ in\ Him.ttf
--attach-file CURLZ_.TTF
--attach-file Frostys\ Winterland.TTF
--attach-file stilltim.ttf
Mais la sortie reconnaissent toujours le nom du fichier avec l'espace que le premier mot.
mkvmerge v3.0.0 ('Hang up your Hang-Ups') built on Dec 6 2010 19:19:04
Automatic MIME type recognition for 'Beach.ttf': application/x-truetype-font
Automatic MIME type recognition for 'Candara.ttf': application/x-truetype-font
Automatic MIME type recognition for 'CASUCM.TTF': application/x-truetype-font
Error: The file 'Complete\' cannot be attached because it does not exist or cannot be read.
merci pour simplifier le script, mais pour A = $ (mkvmerge -i input.mkv | wc -l), vous êtes absent pièce jointe grep -i, la ligne complète doit être A = $ (mkvmerge - i input.mkv | grep -i pièce jointe | wc -l) – dewaforex
@dewaforex: Oups, désolé à ce sujet. Je suis trop zélé. –
Non, problème. C'est plus simple maintenant, mais je n'arrive toujours pas à comprendre la dernière erreur quand on met double qoute sur "$ {attachment [*]}" qui pointait par la réponse d'Ignacio – dewaforex