logo Debian Debian Debian-France Debian-Facile Debian-fr.org Forum-Debian.fr Debian ? Communautés logo inclusivité

Debian-facile

Bienvenue sur Debian-Facile, site d'aide pour les nouveaux utilisateurs de Debian.

Vous n'êtes pas identifié(e).

#1 25-12-2016 08:50:35

Anonyme
Invité

[Résolu] Problème Script qui ouvre un terminal pour chaque fichiers

Bonjour,

Ce script va bien sauf qu'il ouvre un terminal pour chaque fichier qu'il traite et reste tous ouvert.

Comment faire pour qu'il traite les fichiers sélectionnés dans terminal unique et que celui-ci reste ouvert après travail.



#!/bin/sh
OUTPUT=$HOME/Conversion

if [ ! -d $OUTPUT ]; then
mkdir  $OUTPUT

fi

OLDIFS=$IFS
IFS="
"

for filename in $@; do
mate-terminal -x sh -c "sox -S  '$filename' '$OUTPUT'/'$filename'  silence -l 1 0.1 1% -1 2.0 1%;$SHELL";
done
IFS=$OLDIFS
 



Une idée.

Dernière modification par Anonyme (25-12-2016 16:52:46)

#2 25-12-2016 09:05:33

plop6
Membre
Inscription : 09-03-2016

Re : [Résolu] Problème Script qui ouvre un terminal pour chaque fichiers

Plop!

Pas sur, je suis au réveil wink
Essaye de changer ça:

mate-terminal -x sh -c "sox -S  '$filename' '$OUTPUT'/'$filename'  silence -l 1 0.1 1% -1 2.0 1%;$SHELL";


Par ça:

sox -S  '$filename' '$OUTPUT'/'$filename'  silence -l 1 0.1 1% -1 2.0 1%


et je pense que ça suffira, Par contre il faudra le lancer depuis un terminal.

Hors ligne

#3 25-12-2016 09:30:20

Anonyme
Invité

Re : [Résolu] Problème Script qui ouvre un terminal pour chaque fichiers

Bonjour smile

Et oui, moi aussi wink

Pour ta commande, j'en était là aussi avant de mettre mate-terminal -x sh -c **********;$SHELL";

Au départ, je partais là dessus :



OUTPUT=$HOME/Conversion

if [ ! -d $OUTPUT ]; then
mkdir  $OUTPUT

fi

for i in *.flac;
do
sox -S "$i"  "$OUTPUT/$i" silence -l 1 0.1 1% -1 2.0 1%
done



Tout fonctionnait bien même avec les noms avec des espaces. Mais ce script, il fallait que je le mette dans le dossier ou se trouvait tous mes flacs et le lancer en double-cilquant dessus pour que le travail commence. Là tout ce faisait dans un seul terminal. IL traitait tout ce qui se trouvait dedans

J'ai voulu par la suite faire un script "nautilus" et il me fallait un:
mate-terminal -x sh -c **********;$SHELL";
Mais plus moyen de passer les espaces en rajoutant ça.
Et j'ai rajouter le traité "juste les fichiers sélectionnés"

ça réveille non ?  big_smile

Dernière modification par Anonyme (25-12-2016 15:12:43)

#4 25-12-2016 09:37:08

plop6
Membre
Inscription : 09-03-2016

Re : [Résolu] Problème Script qui ouvre un terminal pour chaque fichiers

humm .. je serais toi, j'essairais de perdre l'habitude des noms avec espaces .... mauvaise surprise un jour pour 95% des cas.
Essaye de virer tous les espaces de tes dossiers ( comme ça plus de soucis wink )
Donc c'est un script censé être lancé depuis nautilus. Ok.

Hors ligne

#5 25-12-2016 09:41:22

Anonyme
Invité

Re : [Résolu] Problème Script qui ouvre un terminal pour chaque fichiers

Un truc tout con peut-être, avec sed mettre des _ à la place des espaces et les remettre une fois le traitement terminé. Bah c'est une idée comme une autre. smile

#6 25-12-2016 09:46:49

Anonyme
Invité

Re : [Résolu] Problème Script qui ouvre un terminal pour chaque fichiers

Un petit résumé pour pas se perdre.

Je vais dans le dossier où se trouvent plein de "flac" pour mon cas.
Quelques fichiers m'interressent. je les sélectionne.
je lance le script qui me fait un visuel dans le terminal.
Seul un terminal s'ouvre pour les quelques fichiers à traiter et celui-ci ne se ferme pas à la fin du processus.

Ce script en fait, va enlever les silences du début et de fin d'un morceau de musique,si tu vois le truc. C'est pour plus tard faire des enchainements.

Dernière modification par Anonyme (25-12-2016 09:51:59)

#7 25-12-2016 12:57:36

enicar
Membre
Lieu : pas ici
Distrib. : sid
Noyau : Linux 6.5.3
(G)UI : openbox
Inscription : 26-08-2010

Re : [Résolu] Problème Script qui ouvre un terminal pour chaque fichiers

@Anonyme si tu pouvais mettre des balises code correct avec code=bash, on pourrait
avoir la coloration syntaxique. (la syntaxe de bash et sh sont les mêmes et il n'y a pas sh de
proposer…). Ça serait vraiment très sympa smile Voilà une bonne habitude à prendre pour 2017 big_smile

Hors ligne

#8 25-12-2016 13:25:13

otyugh
CA Debian-Facile
Lieu : Quimperlé/Arzano
Distrib. : Debian Stable
Inscription : 20-09-2016
Site Web

Re : [Résolu] Problème Script qui ouvre un terminal pour chaque fichiers

Protip : pour que ça marche avec les espaces, ils faut mettre des guillemets ~

OUTPUT="$HOME/Conversion" #Guillemets partout, bonne habitude

#if [ ! -d $OUTPUT ]; then
#mkdir  $OUTPUT
#fi
mkdir -p "$OUTPUT" #équivalent

#for i in *.flac;
#do
#    sox -S "$i"  "$OUTPUT/$i" silence -l 1 0.1 1% -1 2.0 1%
#done

find . -name *.flac --exec "sox -S '{}' '${OUTPUT}/$(basename {})' silence -l 1 0.1 1% -1 2.0 1% \;"

 



SCRIPT NON TESTAY, puis je sais jamais pour find pour --exec -exec, -name --name ><
D'expérience vaut mieux utiliser find que des "for", mais d'expérience aussi on peut en chier avec find et exec ; cela dit une fois que ça marche, ça marche ! Contrairement au truc du for qui selon le shell... J'aurais pas confiance.

Dernière modification par otyugh (25-12-2016 13:37:04)


virtue_signaling.pngpalestine.png

En ligne

#9 25-12-2016 13:39:50

enicar
Membre
Lieu : pas ici
Distrib. : sid
Noyau : Linux 6.5.3
(G)UI : openbox
Inscription : 26-08-2010

Re : [Résolu] Problème Script qui ouvre un terminal pour chaque fichiers

Pour ton script, il suffit de le lancer depuis un terminal comme ceci :


mate-terminal -x <ton_script.sh>
 



Et à la fin de ton script pour avoir un shell bash tu rajoutes :


exec /bin/bash
 



En résumé pour <ton_script.sh>, je te proposerai ceci :


#! /bin/sh
OUTPUT=$HOME/Conversion

if [ ! -d $OUTPUT ]; then
    mkdir  $OUTPUT
fi

for filename in "$@"; do
    sox -S "$filename"  "$OUTPUT/$filename" silence -l 1 0.1 1% -1 2.0 1%
done
exec /bin/bash
 



Note comme c'est plus lisible avec la coloration syntaxique et l'indentation !
Note aussi que c'est inutile de bidouiller IFS. Il suffit d'entourer $@
avec des guillemets wink

Donc il te faudra éventuellement un autre script pour lancer ton
script qui contiendrait :


#! /bin/sh
exec mate-terminal -x <ton_script.sh> "$@"
 



Il y a peut-être un moyen de tout mettre dans le même fichier en
utilisant un « here document », comme ça (mais sans garantie que ça
fonctionne, tu nous diras ce qu'il en est wink) :


#! /bin/sh
exec mate-terminal -x <<SCRIPT
OUTPUT=$HOME/Conversion

if [ ! -d $OUTPUT ]; then
    mkdir  $OUTPUT
fi

for filename in "$@"; do
    sox -S "$filename"  "$OUTPUT/$filename" silence -l 1 0.1 1% -1 2.0 1%
done
exec /bin/bash
SCRIPT

 


Je ne pense pas que ça peut fonctionner, mais c'est l'idée… En utilisant
certaines fonctionnalités de bash, ça doit être possible, mais pour
l'instant je ne vois pas trop comment tongue
Et aussi, il faut se souvenir  que  /bin/sh est différent de
/bin/bash. Si tu veux vraiment utiliser bash il faut utiliser
#! /bin/bash pour le shebang et non #! /bin/sh.

Dernière modification par enicar (25-12-2016 16:53:32)

Hors ligne

#10 25-12-2016 16:03:50

Anonyme
Invité

Re : [Résolu] Problème Script qui ouvre un terminal pour chaque fichiers

Merci à vous pour l'aide. smile
Balises avec code=bash corrigés

J'ai pioché un peu dans tout ce que vous m'avez dit. Je viens de changer le cerveau, il a fumé tongue

Bon, le script maintenant est pas trop mal, il y a plus qu'un truc qui cloche. Donc, c'est vraiment mieux.

Je sélection que les fichiers qui m'interresse. C'est OK
Le dossier Convertion se crée bien dans home.  C'est OK

Les noms avec espaces, c'est OK mais si je met

'$filename'  '$OUTPUT/$filename'

  et non pas

"$filename"  "$OUTPUT/$filename"


Mais je suppose que c'est normal vu que j'ai utilisé les guillemets pour la commande entière :

"sox -S '$filename'  '$OUTPUT/$filename' silence -l 1 0.1 1% -1 2.0 1%;$SHELL"



Mais c'est là que ça coince (à moitié) tongue
Le terminal s'ouvre bien, encode le premier fichier mais il faut que je ferme le terminal pour qu'un autre terminal se lance de nouveau pour l'encodage du morceaux suivant etc etc pour tout les autres.

Le script :

#! /bin/bash


#! /bin/sh
OUTPUT=$HOME/Conversion

if [ ! -d $OUTPUT ]; then
    mkdir  $OUTPUT
fi

for filename in "$@"; do
mate-terminal -x sh -c    "sox -S '$filename'  '$OUTPUT/$filename' silence -l 1 0.1 1% -1 2.0 1%;$SHELL";
done
 

Dernière modification par Anonyme (25-12-2016 16:05:48)

#11 25-12-2016 16:15:54

enicar
Membre
Lieu : pas ici
Distrib. : sid
Noyau : Linux 6.5.3
(G)UI : openbox
Inscription : 26-08-2010

Re : [Résolu] Problème Script qui ouvre un terminal pour chaque fichiers

Ben, c'est normal. Tu lances un nouveau mate-terminal pour
chaque commande que tu fais suivre du lancement de bash. Je t'ai
expliqué dans mon message précédent qu'il fallait lancer tout ton script
dans un mate-terminal dans lequel tu lances bash à la fin.

Je ne sais pas si c'est bien clair pour toi. Il faut que tu regardes comment les
commandes s'enchaînent séquentiellement.

Dernière modification par enicar (25-12-2016 16:54:12)

Hors ligne

#12 25-12-2016 16:21:37

Anonyme
Invité

Re : [Résolu] Problème Script qui ouvre un terminal pour chaque fichiers

J'ai essayé mais ça pas fonctionné tongue
Je retente smile

#13 25-12-2016 16:27:41

enicar
Membre
Lieu : pas ici
Distrib. : sid
Noyau : Linux 6.5.3
(G)UI : openbox
Inscription : 26-08-2010

Re : [Résolu] Problème Script qui ouvre un terminal pour chaque fichiers

Il faut dire précisément ce que tu as essayé, et comment.

EDIT: J'avais oublié un truc dans le script pour lancer le mate-terminal. Il faudrait mettre cela :


#! /bin/sh
exec mate-terminal -x <ton_script.bash> "$@"
 



Le "$@" fait toute le différence wink

Dernière modification par enicar (25-12-2016 16:31:10)

Hors ligne

#14 25-12-2016 16:38:06

Anonyme
Invité

Re : [Résolu] Problème Script qui ouvre un terminal pour chaque fichiers

D'accord smile

Dans mon home, j'ai un dossier Scripts.
j'ai mis dedans le script "ESSAI.sh" qui est bien executable.


#! /bin/sh
OUTPUT=$HOME/Conversion

if [ ! -d $OUTPUT ]; then
    mkdir  $OUTPUT
fi

for filename in "$@"; do
sox -S "$filename" "$OUTPUT/$filename" silence -l 1 0.1 1% -1 2.0 1%
done
exec /bin/bash
 



Dans mon home/.config/caja/scripts/
j'ai mis un script LANCEUR_ESSAI.sh (executable pareil normal)


#! /bin/sh

mate-terminal -x /home/Scripts/ESSAI.sh
 



Je vais dans mon dossier, sélectionne deux fichiers et ça me donne ça sur un bandeau rouge dans le terminal :


Il y a eu une erreur lors de la création du processus fils pour ce terminal

L'exécution du processus fils « /home/Scripts/ESSAI.sh » a échoué (Aucun fichier ou dossier de ce type)
 



smile

EDIT: Croisement de post, je regarde ton dernier post.

Dernière modification par Anonyme (25-12-2016 16:38:57)

#15 25-12-2016 16:42:30

Anonyme
Invité

Re : [Résolu] Problème Script qui ouvre un terminal pour chaque fichiers

Mince je me suis trompé,

c'est /home/patrick/Scripts et non pas /home/Scripts mad

#16 25-12-2016 16:45:14

enicar
Membre
Lieu : pas ici
Distrib. : sid
Noyau : Linux 6.5.3
(G)UI : openbox
Inscription : 26-08-2010

Re : [Résolu] Problème Script qui ouvre un terminal pour chaque fichiers

euh, tu n'aurais pas voulu faire :


#! /bin/sh
exec mate-terminal -x $HOME/Scripts/ESSAI.sh "$@"
 



Tu pourrais mettre $HOME/Scripts dans ton PATH aussi…
Remarque le exec est une petite optimisation…

Dernière modification par enicar (25-12-2016 16:45:33)

Hors ligne

#17 25-12-2016 16:47:50

Anonyme
Invité

Re : [Résolu] Problème Script qui ouvre un terminal pour chaque fichiers

Ça fonctionne !!!!!!!


Input File     : 'Confusion.flac'
Channels       : 2
Sample Rate    : 44100
Precision      : 16-bit
Duration       : 00:03:42.60 = 9816660 samples = 16695 CDDA sectors
File Size      : 24.7M
Bit Rate       : 886k
Sample Encoding: 16-bit FLAC

In:100%  00:03:42.60 [00:00:00.00] Out:9.40M [      |      ] Hd:0.0 Clip:0    
Done.

Input File     : 'Creedence Clearwater Revival - Fortunate Son.flac'
Channels       : 2
Sample Rate    : 96000
Precision      : 24-bit
Duration       : 00:02:22.59 = 13688832 samples ~ 10694.4 CDDA sectors
File Size      : 44.6M
Bit Rate       : 2.50M
Sample Encoding: 24-bit FLAC

In:100%  00:02:22.59 [00:00:00.00] Out:13.0M [      |      ] Hd:3.2 Clip:0    
Done.

Input File     : 'Dion - Runaround Sue (HD) 1961.flac'
Channels       : 2
Sample Rate    : 96000
Precision      : 24-bit
Duration       : 00:02:55.06 = 16805888 samples ~ 13129.6 CDDA sectors
File Size      : 55.5M
Bit Rate       : 2.54M
Sample Encoding: 24-bit FLAC

In:100%  00:02:55.06 [00:00:00.00] Out:15.9M [      |      ] Hd:0.4 Clip:0    
Done.

Input File     : 'Gary Glitter - No Particular Place To Go.flac'
Channels       : 2
Sample Rate    : 44100
Precision      : 16-bit
Duration       : 00:02:47.62 = 7392000 samples = 12571.4 CDDA sectors
File Size      : 20.0M
Bit Rate       : 956k
Sample Encoding: 16-bit FLAC

In:100%  00:02:47.62 [00:00:00.00] Out:7.18M [      |-     ] Hd:4.6 Clip:0    
Done.

Input File     : 'I Get Around.flac'
Channels       : 2
Sample Rate    : 44100
Precision      : 16-bit
Duration       : 00:02:13.87 = 5903520 samples = 10040 CDDA sectors
File Size      : 13.0M
Bit Rate       : 775k
Sample Encoding: 16-bit FLAC

In:100%  00:02:13.87 [00:00:00.00] Out:5.65M [      |      ] Hd:1.4 Clip:0    
Done.

Input File     : 'Jeff Beck - Love Is Blue (L'amour Est Bleu) - 1968.flac'
Channels       : 2
Sample Rate    : 96000
Precision      : 24-bit
Duration       : 00:03:03.34 = 17600512 samples ~ 13750.4 CDDA sectors
File Size      : 48.6M
Bit Rate       : 2.12M
Sample Encoding: 24-bit FLAC

In:100%  00:03:03.34 [00:00:00.00] Out:16.6M [      |      ] Hd:2.1 Clip:0    
Done.

Input File     : 'Jona Lewie - Stop The Cavalry.flac'
Channels       : 2
Sample Rate    : 44100
Precision      : 16-bit
Duration       : 00:02:54.20 = 7682220 samples = 13065 CDDA sectors
File Size      : 19.0M
Bit Rate       : 874k
Sample Encoding: 16-bit FLAC

In:100%  00:02:54.20 [00:00:00.00] Out:7.67M [      |      ] Hd:0.4 Clip:0    
Done.

Input File     : '(Just Like) Starting Over.flac'
Channels       : 2
Sample Rate    : 44100
Precision      : 16-bit
Duration       : 00:03:39.53 = 9681420 samples = 16465 CDDA sectors
File Size      : 21.1M
Bit Rate       : 771k
Sample Encoding: 16-bit FLAC

In:100%  00:03:39.53 [00:00:00.00] Out:9.51M [      |      ] Hd:0.0 Clip:0    
Done.

Input File     : 'Laissons Entrer Le Soleil.flac'
Channels       : 2
Sample Rate    : 44100
Precision      : 16-bit
Duration       : 00:03:44.24 = 9888984 samples = 16818 CDDA sectors
File Size      : 24.1M
Bit Rate       : 859k
Sample Encoding: 16-bit FLAC

In:100%  00:03:44.24 [00:00:00.00] Out:9.77M [======|======] Hd:0.4 Clip:0    
Done.

Input File     : 'Paul Mauriat ~ Love is Blue (HQ).flac'
Channels       : 2
Sample Rate    : 96000
Precision      : 24-bit
Duration       : 00:02:36.80 = 15052800 samples ~ 11760 CDDA sectors
File Size      : 44.9M
Bit Rate       : 2.29M
Sample Encoding: 24-bit FLAC

In:100%  00:02:36.80 [00:00:00.00] Out:14.4M [      |      ] Hd:3.9 Clip:0    
Done.
patrick@debian:~/Bureau/nouveau dossier$
 





├── [ 23M]  Confusion.flac
├── [ 42M]  Creedence Clearwater Revival - Fortunate Son.flac
├── [ 53M]  Dion - Runaround Sue (HD) 1961.flac
├── [ 16M]  Gary Glitter - No Particular Place To Go.flac
├── [ 12M]  I Get Around.flac
├── [ 47M]  Jeff Beck - Love Is Blue (L'amour Est Bleu) - 1968.flac
├── [ 18M]  Jona Lewie - Stop The Cavalry.flac
├── [ 20M]  (Just Like) Starting Over.flac
├── [ 23M]  Laissons Entrer Le Soleil.flac
└── [ 43M]  Paul Mauriat ~ Love is Blue (HQ).flac

 296M used in 0 directories, 10 files
patrick@debian:~/Conversion$
 



Un grand merci big_smile

#18 25-12-2016 16:50:00

Anonyme
Invité

Re : [Résolu] Problème Script qui ouvre un terminal pour chaque fichiers

enicar a écrit :

euh, tu n'aurais pas voulu faire :


#! /bin/sh
exec mate-terminal -x $HOME/Scripts/ESSAI.sh "$@"
 



Tu pourrais mettre $HOME/Scripts dans ton PATH aussi…
Remarque le exec est une petite optimisation…



Oui oui, j'allais refaire dans ce sens, je voulais être plus rapide à poster que de faire ça dans les règles de l'art wink


Tu pourrais mettre $HOME/Scripts dans ton PATH aussi…
Remarque le exec est une petite optimisation…
 



Pas ça, c'est encore du chinois pour moi big_smile

Dernière modification par Anonyme (25-12-2016 16:51:26)

#19 25-12-2016 16:50:26

enicar
Membre
Lieu : pas ici
Distrib. : sid
Noyau : Linux 6.5.3
(G)UI : openbox
Inscription : 26-08-2010

Re : [Résolu] Problème Script qui ouvre un terminal pour chaque fichiers

Anonyme a écrit :

Un grand merci big_smile


Je t'en prie wink

Hors ligne

Pied de page des forums