Pages : 1
#1 Le 15/01/2011, à 19:56
- sojoachim
Définir un emplacement
bonjour à tous,
Je commence à faire mes propres scripts histoire de commencer tt doucement à programmer.
Actuellement, j'élabore un script pour convertir des fichiers.
Je souhaite qu'au début du script l'utilisateur saisisse l'emplacement où se trouve les fichiers à convertir.
(les fichiers convertis seront toujours enregistré dans le même dossier).
Voici mon script qui demande à l'utilisateur de saisir l'emplacement :
#! /bin/bash
read emplacement
cd $emplacement
exit 0
Le soucis est qu'à la fin du script je ne suis pas du tout à l'emplacement voulu. Je suis sur l'emplacement d'origine.
Comment je dois faire pour prendre en compte l'emplacement saisie par l'utilisation ?
J'avais pensé à créer un script qui change un alias avec une commande cd dans le fichier ~/.bashrc
(cf. ce topic)
mais j'aimerai savoir si il a une autre solution possible
Je vous remercie par avance pour vos réponses.
Hors ligne
#2 Le 15/01/2011, à 20:26
- kamui57
Re : Définir un emplacement
edit : je laisse le bas de mon message pour garder une trace de mes tests, mais ce n'est pas utile ici.
Ton script fonctionne, il va dans le bon dossier, mais quand tu sors du script tu n'y es plus.
#! /bin/bash
echo "Veuillez donner le chemin du dossier où aller"
read emplacement
cd $emplacement
# On écrit "chemin :" puis le résultat de la commande pwd
# qui nous donne le chemin absolu du dossier courant
echo "chemin absolu : `pwd`"
exit 0
résultat :
stephmint@satellitem30-laptop ~ $ bash testsaisie.bash
Veuillez donner le chemin du dossier où aller
..
chemin absolu : /home
stephmint@satellitem30-laptop ~ $
*********** inutile à partir d'ici ********************
tu rentres quoi comme emplacement pour tester ?
J'ai testé ceci en ligne de commande (pour tester les espaces)
stephmint@satellitem30-laptop ~ $ mkdir dossier\ test
stephmint@satellitem30-laptop ~ $ read emplacement && cd $emplacement
dossier test
bash: cd: dossier: Aucun fichier ou dossier de ce type
stephmint@satellitem30-laptop ~ $ read emplacement && cd $emplacement
dossier\ test
bash: cd: dossier: Aucun fichier ou dossier de ce type
stephmint@satellitem30-laptop ~ $ read emplacement && cd $emplacement
"dossier test"
bash: cd: "dossier: Aucun fichier ou dossier de ce type
stephmint@satellitem30-laptop ~ $ read emplacement && cd "$emplacement"
"dossier test"
bash: cd: "dossier test": Aucun fichier ou dossier de ce type
stephmint@satellitem30-laptop ~ $ read emplacement && cd "$emplacement"
dossier\ test
stephmint@satellitem30-laptop ~/dossier test $
mais sans espaces ça marche bien en chemins relatifs et absolus. Cependant je ne peux pas utiliser ~ ni /home/$USER.
Dernière modification par kamui57 (Le 15/01/2011, à 20:35)
Quand le dernier arbre aura été abattu, et le dernier animal exterminé, les hommes se rendront compte que l'argent ne se mange pas (proverbe indien)
Toshiba Satellite L655 4 Go RAM, Archlinux Gnome-shell,LXDE / W7
Toshiba Satellite M30 512 Mo RAM, Archlinux Gnome 3 restreint / Crunchbang LXDE
https://help.ubuntu.com/community/Pastebinit pour poster du texte sur internet en console
Hors ligne
#3 Le 15/01/2011, à 23:59
- ehmicky
Re : Définir un emplacement
N'oublie pas les guillemets :
cd "$emplacement"
Pour prendre en compte ~ et $USER, tu peux par exemple faire :
cd "$(eval "echo $emplacement")"
Stego++, bibliothèque libre de stéganographie (avec cryptographie), à venir !
Besoin de votre aide :
Stats sur les compilateurs C++ les plus utilisés
Comment utiliser les archetypes C++ ?
Hors ligne
#4 Le 16/01/2011, à 09:54
- serged
Re : Définir un emplacement
Ça ne peut pas marcher... le "cd" agit uniquement sur l'environnement du script. Quand tu sors du script, tu reviens au répertoire d'origine.
Tu peux t'en tirer en rajoutant un alias ou une fonction dans ton .bashrc :
alias docd='read -p "Votre répertoire: " emplacement; cd $emplacement'
LinuxMint Vera Cinnamon et d'autres machines en MATE, XFCE... 20.x , 21.x ou 19.x
Tour : Asus F2A55 / AMD A8-5600K APU 3,6GHz / RAM 16Go / Nvidia GeForce GT610 / LM21.1 Cinnamon
Portable : LDLC Mercure MH : Celeron N3450 /RAM 4Go / Intel HD graphics 500 i915 / biboot Win 10 (sur SSD) - LM21.1 MATE (sur HDD)
Hors ligne
#5 Le 16/01/2011, à 10:13
- ehmicky
Re : Définir un emplacement
Ou en sourçant le script :
. SCRIPT
plutôt que l'exécuter :
./SCRIPT
Stego++, bibliothèque libre de stéganographie (avec cryptographie), à venir !
Besoin de votre aide :
Stats sur les compilateurs C++ les plus utilisés
Comment utiliser les archetypes C++ ?
Hors ligne
#6 Le 16/01/2011, à 15:51
- sojoachim
Re : Définir un emplacement
Merci pour vos réponses !! Ça devient plus clair !
Voici mon petit script :
#! /bin/bash
# alias.sh
shopt -s expand_aliases
docd
exit 0
Par contre quand je l'intègre dans mon script pour convertir les vidéos sa ne marche pas...:(
Il doit revenir à l'emplacement d'origine directement après que la commande de l'alias soit effectuer :
#! /bin/bash
# alias.sh
#On se positionne dans le dossier des vidéos à convertir
shopt -s expand_aliases
docd
#On va déplacer toutes les vidéos qui sont déjà en .avi
for file in *.avi
do
mv "${file}" /home/joachim/Musique/Video/avi/
done
#On convertit toutes les vidéos qui sont en .flv
for file in *.flv
do
ffmpeg -i "${file}" -f avi /home/joachim/Musique/Video/avi/${file}.avi
done
echo "Conversion effectuée"
exit 0
Pour détourner ce problème j'ai pour idée d'intégrer dans mon script de conversion l'utilisation d'un script qui demande l'emplacement ceci afin que le changement d'emplacement s'effectue bien.
Cependant je me demande si il n'y a pas une autre solution pour que l'alias s'exécute correctement ?
Certes l'utilité de mettre cet alias peut paraître limité car faire un cd ne prend pas beaucoup de temps. Mais c'est vraiment dans l'idée d'accompagner l'utilisateur dans toutes ses actions que j'aimerais l'intégrer.
Hors ligne
#7 Le 16/01/2011, à 16:14
- ehmicky
Re : Définir un emplacement
Pour sourcer un script, tu dois utiliser un point pas un dièse, qui sert lui aux commentaires.
En fait je pense que tu te poses les mauvaises questions. cd est une commande de console, pas de shell non-interactif.
Par exemple, plutôt que de faire :
cd "$DIR"
for file in *.avi
do
mv "${file}" /home/joachim/Musique/Video/avi/
done
tu peux faire :
for file in "$DIR"/*.avi
do
mv "$file" /home/joachim/Musique/Video/avi/
done
et ainsi de suite.
Dernière modification par ehmicky (Le 16/01/2011, à 16:18)
Stego++, bibliothèque libre de stéganographie (avec cryptographie), à venir !
Besoin de votre aide :
Stats sur les compilateurs C++ les plus utilisés
Comment utiliser les archetypes C++ ?
Hors ligne
#8 Le 16/01/2011, à 18:41
- sojoachim
Re : Définir un emplacement
C'est bon ca marche nickel !
Du coup j'ai utilisé une fonction qui permet de faire le placement dans le répertoire voulu :
#! /bin/bash
#On va déplacer toutes les vidéos qui sont déjà en .avi
emplacement ()
{
read -p "Entrer l'emplacement :" DIR
cd $DIR
}
emplacement
for file in $DIR*.avi
do
mv "${file}" /home/joachim/Musique/Video/avi/
done
echo " !!!! DEPLACEMENT EFFECTUER !!!!! "
#On convertit toutes les vidéos qui sont en .flv
for file in *.flv
do
ffmpeg -i "${file}" -f avi /home/joachim/Musique/Video/avi/${file}.avi
done
echo " !!!! Conversion effectuée !!!! "
exit 0
Content d'avoir réussi mon premier script !
Merci pour votre aide ! Ca m'a bien permis d'avancer !!
Mais je pense que j'ai un gros travail à faire sur la définition des notions que vous avez avancé notamment celle de ehmicky !
terminer bien votre week end !
Hors ligne
#9 Le 17/01/2011, à 04:19
- ehmicky
Re : Définir un emplacement
Le cd $DIR est inutile maintenant dans ce script, et n'oublie pas les guillemets sinon tu auras des surprises si l'utilisateur tape un chemin contenant des espaces.
Tu devrais aussi vérifier l'existence de DIR :
read -p "Emplacement ? " DIR
while [[ ! -d $DIR ]]
do
read -p "$DIR n'existe pas. Emplacement ? " DIR
done
Enfin, il y a des p'tites choses optimisables. Exemple :
#! /bin/bash
DIR_DST="/home/joachim/Musique/Video/avi/"
[[ ! -d $DIR_DST ]] && echo "Erreur : $DIR_DST n'existe pas." && exit 1
read -p "Entrer l'emplacement :" DIR_SRC
while [[ ! -d $DIR_SRC ]]
do
read -p "$DIR_SRC n'existe pas. Emplacement ? " DIR_SRC
done
#On va déplacer toutes les vidéos qui sont déjà en .avi
mv "$DIR_SRC/*.avi" "$DIR_DST" 2> /dev/null
echo " !!!! DEPLACEMENT EFFECTUE !!!!! "
#On convertit toutes les vidéos qui sont en .flv
for file in *.flv
do
ffmpeg -i "$file" -f avi "$DIR_DST/$file.avi"
done
echo " !!!! Conversion effectuée !!!! "
Enfin, si tu es vraiment méticuleux, tu peux tester les permissions d'écriture + exécution + lecture de $DIR_SRC et de $DIR_DST via les test -x, -r et -w
Dernière modification par ehmicky (Le 17/01/2011, à 04:40)
Stego++, bibliothèque libre de stéganographie (avec cryptographie), à venir !
Besoin de votre aide :
Stats sur les compilateurs C++ les plus utilisés
Comment utiliser les archetypes C++ ?
Hors ligne
#10 Le 25/01/2011, à 22:40
- sojoachim
Re : Définir un emplacement
Okk Merci pour ces indications !!
Je vais faire des petites recherches (bonnes recherches !) pour intégrer toutes les notions que tu as posé !
J'aurais encore plein d'autres questions mais je vais attendre un peu avant de vous les poser, histoire de rechercher un peu !
Je retourne de se pas basher un petit coup !
Bonne soirée !
Hors ligne