0
votes

(encore) qu'est-ce qui ne va pas avec ce script bash télécharger automatique youtube-dl

Il y a parfois quelque chose, j'ai demandé ce qui n'allait pas sur un script de bash que j'essayais de faire et j'ai eu une excellente solution: Quel est le problème avec ce script automatique YouTube-DL?

Je continuais à modifier le script pour travailler avec différentes combinaisons de commandes YouTube-DL et à gérer mon très instable forte> connexion Internet (c'est la raison de la boucle tandis / do) et il a continué à fonctionner parfaitement, mais lorsque j'ai essayé d'utiliser cette même structure de script pour télécharger des listes de lecture YouTube à partir d'un élément spécifique de la liste (par exemple: article Numéro 15) C'est quand je reçois une erreur. Je suis toujours à peu près un débutant dans le script de bash (évidemment), donc je ne sais pas ce qui ne va pas. P>

Le script en question est-ce: P>

#!/bin/bash

function video {
youtube-dl --no-warnings -o '%(playlist)s/%(playlist_index)s - %(title)s.%(ext)s' --socket-timeout 15 --hls-use-mpegts -R 64 --fragment-retries 64 --prefer-free-formats --all-subs --embed-subs -f 'bestvideo[height<=720]+bestaudio/best[height<=720]' "$@"
}

read -p "url: " url
video "$url"
while [ $? -ne 0 ]; do sleep 5 && video "$url" ; done
clear && echo completed!


3 commentaires

Vraisemblablement - PlayList-Start = 15 doit être une option sur votre script, pas sur printf ou quelque chose que vous souhaitez imprimer sur l'entrée standard du script. La syntaxe pour cela est printf "$ url" | List720 --PlayList-Start = 15 . Les trucs avant | est une commande indépendante que votre script n'a aucune connaissance de.


J'ai essayé votre suggestion et ça ne marche toujours pas ... E.g.: Printf https://www.youtube.com/playlist?list=pls1QULWO1RIMAXCEQW5J HK3B-6RGDWO_ | List720 --PlayList-Start = 15


Vous ne voulez pas utiliser une URL en tant que chaîne de format printf . En outre, les URL contiennent des caractères interprétés par la coquille. Essayez printf "% s" 'https: //...gdw0_' . C'est-à-dire que l'URL soit une dispute à la conversion % s spécifiée et placez-la en guillemets simples. S'il contient des guillemets simples, vous pouvez remplacer celles par '\' '' (citation backslash citation citation).


3 Réponses :


-2
votes

in Bash, le personnage '-' au début d'une commande est utilisé pour définir une option, si vous souhaitez imprimer - Playlist ... Vous devez utiliser le caractère d'évacuation '\' .

Essayez quelque chose comme printf "\ - \ - playlist ..."

Correction: Printf '% s' '--PlayList ...'


3 commentaires

La solution appropriée à celle-ci est printf '% s' '--PlayList' . L'OP devrait probablement utiliser généralement une piqûre de format comme premier argument si elle insiste sur l'utilisation de printf (et apprenez à citer leurs chaînes).


Désolé, mais la suggestion de GCadiou n'a pas fonctionné: PrintF \ - \ - Playlist-Start = 15 https://www.youtube.com/playlist?list=pls1QULWO1RIMAXCEQW5J HK3B-6RGDWO_ | List720 En outre, je ne comprendrais peut-être pas la suggestion de Tripleee, mais cela n'a pas fonctionné non plus: printf 'https://www.youtube.com/playlist?list=pls1QULWO1RIMAmaxceqw5 JHK3B-6RGDWO_' ' --Playlist-start = 15 '| LISTE720


Le premier argument à printf est une chaîne de format. Pour imprimer une chaîne avec des tirets, printf '% s' '-code-with-tirets' et si vous souhaitez imprimer une autre chaîne également, ajoutez-les après la chaîne de format (la chaîne de format est répétée. jusqu'à ce que tous les arguments soient épuisés). Vous n'avez toujours pas besoin ou que vous voulez faire cela, comme expliqué dans mon commentaire original à la question.



0
votes

résolu!

Mon frère (un programmeur "à la retraite") a pris du temps pour évaluer comment fonctionne le script Bash et nous avons affiché une façon de faire fonctionner le script de manière plus simple en ajoutant simplement les commandes YouTube-DL et le URL YouTube en tant qu'arguments.

Le script a changé un peu, il ressemble maintenant à ceci: xxx

MAINTENANT, je dois juste écrire dans mon terminal: List720 --PlayList-Start = 15 https://www.youtube.com/playlist?list=pls1QULWO1RIMAmaxceqw5JHK3B-6RGDWO_ Et cela fonctionne exactement comme je le veux. < / P>

Merci beaucoup pour votre aide et vos suggestions!


5 commentaires

Deux suggestions: Double-citez les références à $ @ , car parfois, cela fera des choses étranges aux références variables / paramètres non cotées. En outre, vous pouvez simplifier la boucle à jusqu'à la vidéo "$ @"; dormir 5; fait . Oh, et je recommande shellcheck.net pour signaler des erreurs courantes telles que les doubles citations manquantes.


Merci @gordon ... maintenant, j'ai une autre question (et encore, désolé si la question est trop "débutant" ... Je ne sais même pas comment m'expliquer en utilisant la bonne langue): dans votre boucle simplifiée Suggestion, comment Bash "sait" que je veux rappeler la vidéo "$ @" après le "dort 5"?


C'est ainsi que le jusqu'à boucle (et le très similaire pendant boucle). Il exécute le bit entre jusqu'à et faire , et si cela échoue, la pièce entre fait et fait , Ensuite, essayez à nouveau (à partir du jusqu'à ) jusqu'à il réussit. (Un tandis que boucle a le test opposé: il continue à courir pendant que la partie de test réussit, c'est-à-dire jusqu'à ce qu'elle échoue.) Qu'est-ce qui peut vous déranger est que la partie de test est que la partie test t Juste un test passif, c'est une activité réelle (en fait, c'est l'activité que vous aimez); Mais tous les tests sont en réalité des activités, celle-ci est un peu plus active que la plupart.


Oui, je pense que je comprends ... je pense! ... Si je comprends bien, j'utilisais le "tandis que [$? -Ne 0]" Comme un "jusqu'à" et quand j'utilise le "Jusqu'à ce que" Il faut ajouter que "[$? J'ai ajouté les citations doubles et j'ai remplacé le moment avec la ligne jusqu'à la ligne et cela fonctionne comme prévu!


Pour fond sur ceci, voir Stackoverflow.com/questions/36313216/...



2
votes

Un design bien meilleur est d'accepter toutes les options et l'URL en tant qu'arguments de ligne de commande. Les scripts nécessitant des E / S interactifs sont Pesky à inclure dans des scripts plus importants et généralement plus difficiles à utiliser (vous perdez la possibilité d'utiliser l'historique d'achèvement de l'onglet de votre coquille et de la ligne de commande, etc.).

list720 <<<'http://example.com/%7Efnord'


0 commentaires