Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#1 Le 15/01/2011, à 20: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, à 21: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, à 21: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 16/01/2011, à 00: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, à 10: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, à 11: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, à 16: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, à 17: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, à 17: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, à 19: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, à 05: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 smile

Dernière modification par ehmicky (Le 17/01/2011, à 05: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, à 23: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