Vous n'êtes pas identifié(e).
Arrivé là, j'aimerai que le shell revienne au début du script...
Euh... Je suis dans la bonne rubrique là non ? "Besoin d'explications complémentaires" !
J'aurais peut-être dû l'appeler "chez Guizmo" !lol
Je précise que j'ai fait un essai avec for, j'ai laissé tombé, parcequ'à chaque fois que je fermais vlc, le script le relançait...
Dernière modification par Guizmo (05-03-2015 23:00:13)
Je suis débutant, si à la lecture d'un de mes postes vous avez des suggestions, des liens à me donner ou n'importe quoi qui puisse me faire avancer, n'hésitez pas ! !
Merci
Hors ligne
Euh... Je suis dans la bonne rubrique là non ? "Besoin d'explications complémentaires" !
J'aurais peut-être dû l'appeler "chez Guizmo" !lol
Je vois que, de complément en complément, tu vas aboutir à la maîtrise totale de unix et tous ses descendants.
Hors ligne
On peut encore améliorer, en utilisant l'option -e de read. Ça permet
d'utiliser readline, et donc d'avoir une complétion, du coup plus besoin
d'afficher la liste des fichiers en cas d'erreurs.
On peut faire comme suit :
Comme, on se positionne dans le répertoire des films, on peut réduire
les arguments du test -e et de vlc. J'ai mis la variable $REPLY entre
guillemets pour que les caractères d'espacement (espace, tabulation,…)
ne pose pas de problème.
Ce qui se passe quand un nom fichier contient un espace, c'est que
l'argument va être transmis comme deux chaines (ou plus) séparés au test
-e. Comme le test -e est un test unaire (il ne prend qu'un argument),
bash va râler… Pareil, pour vlc, qui va voir deux arguments au lieu d'un
seul (enfin, normalement, il ne le verra jamais, car le test -e va échouer ).
En entourant de guillemets la variable $REPLY on demande à bash de
tout transmettre en une seul chaine.
En fait, sans les guillemets tous les caractères d'espacements comme
les espaces, les tabulations et les caractères de nouvelle ligne vont
être supprimés
Ceci est dû au fait que bash découpe les arguments en se servant des
caractères d'espacement comme délimiteur. Pour t'en convaincre tu
essairas le code suivant :
Dans le premier cas, echo reçoit 5 arguments. Dans le second, il en
reçoit 1.
On peut même faire un petit script qui renvoie le nombre d'arguments
qu'on lui passe en ligne de commande :
Si j'appelle ce sript : compte-arguments.bash :
affiche :
Par contre :
affiche :
Évidemment, tout ceci amène d'autres questions que je vais laisser en suspens pour l'instant
Dernière modification par enicar (06-03-2015 10:49:34)
Hors ligne
que je vais laisser en suspens
Hitchcockien, n'est-il pas ?
saque eud dun (patois chtimi : fonce dedans)
Hors ligne
Hors ligne
Hors ligne
Hors ligne
À donf...
@enicar
Merci...
Alors !
Je savais que les "" servaient à regrouper plusieurs arguments séparés par des espaces en un seul (je suis souvent obligé de les utiliser avec find ou cd), après je n'avais pas pensé à sa réaction avec echo qui supprime les espaces en trop... J'ai déjà vu qqu part stdin, stdout et stderr.
Ta première version est plus adaptée au contexte "d'utilisation" parce-que le nom du film n'est par tjs en début de ligne, du coup pour utiliser tab... Mais c'est très intéressant à savoir !
Peut-être qu'il existe une façon d'adapter ça à base d'expressions régulières... Ça complique pas mal les choses, mais je vais tenter de me tirer les cheveux là dessus cet AM ! (j'ai de sérieux doutes sur mes chances de résultats positifs )
Un problème rencontré avec tab : tab me met un espace à la fin qui renvoie le script à
Si je supprime l'espace, ça lance le film sans pb...
Je suis débutant, si à la lecture d'un de mes postes vous avez des suggestions, des liens à me donner ou n'importe quoi qui puisse me faire avancer, n'hésitez pas ! !
Merci
Hors ligne
Il te reste à l'intégrer dans ton script
Dans la substitution avec sed j'ai échappé le $ avec \ car sinon
bash va essayer de substituer une variable…
Sinon, c'est simple, je cherche si il y a un espace en fin de chaine.
Si oui, je le remplace par rien, en d'autres mots, on le supprime.
Si il n'y a pas d'espace à la fin, on ne fait rien.
Remarque, ce code risque de ne pas fonctionner si un nom de fichier
comporte un caractère nouvelle ligne… mais bon, ce n'est pas pratique
d'avoir des caractères nouvelles ligne dans les noms de fichiers,
n'est-ce pas ?
Dernière modification par enicar (06-03-2015 17:06:46)
Hors ligne
Je vois que, de complément en complément, tu vas aboutir à la maîtrise totale de unix et tous ses descendants.
Pour la maîtrise totale d'unix, ça se fera sans moi, hein
Hors ligne
Je suis débutant, si à la lecture d'un de mes postes vous avez des suggestions, des liens à me donner ou n'importe quoi qui puisse me faire avancer, n'hésitez pas ! !
Merci
Hors ligne
Je savais que les "" servaient à regrouper plusieurs arguments séparés par des espaces en un seul (je suis souvent obligé de les utiliser avec find ou cd), après je n'avais pas pensé à sa réaction avec echo qui supprime les espaces en trop...
D'abord, on peut se servir aussi des simples quotes. La différence
par rapport aux guillemets, c'est que bash ne fera pas la $ substitution,
pour les variables par exemple. En résumé, avec les simples quotes, bash
ne fait aucune substitution, avec les guillemets, on peut insérer la valeur de variable
(en utilisant $var, tout simplement) ou le résultat de sortie de commande (avec $( ) ).
Ensuite, ce n'est pas echo qui supprime les espaces, mais c'est bash.
Bash analyse chaque ligne qu'on lui passe, et fait diverses substitutions,
comme les alias, les variables, les substitutions résultant de commande
(comme avec les apostrophes inverses ou $(cmd )). C'est bash aussi qui
interprète les « glob », c'est à dire les motifs du shell, du style *.txt, etc…
Je ne connais pas l'ordre de toutes ses transformations. Ça ne pose pas de
problème en général, mais il faut savoir que bash le fait dans un certain ordre.
Dernière modification par enicar (07-03-2015 08:12:15)
Hors ligne
Cette façon de faire est très mauvaise. Ça consomme des ressources
système non nécessaire pour une opération aussi simple (notamment
des descripteurs de fichiers).
La bonne façon de faire est :
Ici, on n'utilise l'expansion des motifs du shell (appelés « glob »). Donc on ne lance
pas de nouveau processus et on utilise pas de descripteurs de fichiers supplémentaires.
Hors ligne
affichera :
Par contre :
affichera :
On peut obtenir le même résultat avec la seconde méthode qu'avec la première
en changeant le répertoire courant :
affichera
Hors ligne
est probablement fausse. En effet, si l'on veut faire une affectation, il suffirait de faire :
Ce qui n'affiche pas la liste des fichiers contrairement au résultat désiré. Le $ sert à faire
la substitution de la variable par la valeur qu'elle contient. Quand on veut juste fixer la
valeur d'une variable, on n'utilise pas le $ devant le nom de cette variable (contrairement
à d'autres langages comme perl ).
Pour afficher la liste des fichiers il suffit de faire un « ls » ! Pas besoin
de stocker ce résultat dans une variable ou dans un fichier puisqu'on veut
juste afficher le résultat du « ls ». Et bien, faisons donc juste un « ls ».
Je propose la version suivante :
En plus, il n'y a plus besoin de $(ls …). J'avais bien dit que cette façon de faire était mauvaise.
Hors ligne
me renvoie par exemple:
Je tape 1 suivi de Entrée et ça me lance le film1.mkv dans mplayer.
Tu peux personnaliser le prompt en ajoutant au début:
Ce qui remplace "#?" par l'invite "Quel film regarder ?"
Hors ligne
Hors ligne
Ma liste apparaît en bloc sans retour à la ligne (mais avec des espaces et sans \n cette fois )
Sinon pour select : c'est une boucle?
Si c'est non : Peut-on l'intégrer dans une boucle ?
PS3="Quel film regarder ? "
Ce qui remplace "#?" par l'invite "Quel film regarder ?"
Je n'ai pas ce problème "#?" avec "read -p"...
ceci dit c'est plus court à écrire
Je suis débutant, si à la lecture d'un de mes postes vous avez des suggestions, des liens à me donner ou n'importe quoi qui puisse me faire avancer, n'hésitez pas ! !
Merci
Hors ligne
effectivement le prompt est "#?"
Et manifestement c'est une boucle puisque lorsque que je ferme vlc (chez moi) l'invit "#?" revient...
Dernière modification par Guizmo (15-03-2015 16:40:32)
Je suis débutant, si à la lecture d'un de mes postes vous avez des suggestions, des liens à me donner ou n'importe quoi qui puisse me faire avancer, n'hésitez pas ! !
Merci
Hors ligne
Hors ligne
Je ne sais pas si c'est normal que lorsque que je fais :
f=/home/laurent/Vidéos/*
echo $f
Ma liste apparaît en bloc sans retour à la ligne (mais avec des espaces et sans \n cette fois )
C'est normal ; je t'ai déjà donné tous les éléments pour répondre à cette question…
Essaye, avec des guillemets :
pour voir…
Dernière modification par enicar (15-03-2015 16:53:33)
Hors ligne
me renvoie
Sinon je n'avais rien toucher au retour de shopt, nullglob est tjs sur off...
Dernière modification par Guizmo (15-03-2015 17:03:31)
Je suis débutant, si à la lecture d'un de mes postes vous avez des suggestions, des liens à me donner ou n'importe quoi qui puisse me faire avancer, n'hésitez pas ! !
Merci
Hors ligne
Je suis débutant, si à la lecture d'un de mes postes vous avez des suggestions, des liens à me donner ou n'importe quoi qui puisse me faire avancer, n'hésitez pas ! !
Merci
Hors ligne
Hors ligne
Je suis débutant, si à la lecture d'un de mes postes vous avez des suggestions, des liens à me donner ou n'importe quoi qui puisse me faire avancer, n'hésitez pas ! !
Merci
Hors ligne