#1 Le 22/03/2010, à 22:58
- Ptilutin
bash : utiliser la commande cd pour changer de repertoire
Salut,
je voudrais savoir comment faire un script bash pour changer de repertoire dans le shell parent, car par exemple avec ce test :
#!/bin/bash
cd /media/sdc1;
exit
Moi je voudrais que ce soit dans mon shell que je me sois deplacé, et pas uniquement durant l'execution du script.
Le seul truc que j'ai pu trouver pour l'instant c'est ca :
#!/bin/bash
cd /media/sdc1;
gnome-terminal
exit
Mais bon je veux pas que ca ouvre une nouvelle fenetre donc c'est pas genial..
donc y a t-il une solution ?
Merci d'avance
Dernière modification par Ptilutin (Le 22/03/2010, à 23:00)
Hors ligne
#2 Le 22/03/2010, à 23:18
- MrAzerty
Re : bash : utiliser la commande cd pour changer de repertoire
Salut,
essaye avec export PWD (PWD est le répertoire courant, export sert à spécifier que la variable vaudra aussi pour le shell parent):
#!/bin/bash
export PWD=/media/sdc1;
exit 0
Edit: Non, j'ai testé ça marche pas.
Dernière modification par MrAzerty (Le 22/03/2010, à 23:27)
On est toujours le geek de quelqu'un.
Hors ligne
#3 Le 22/03/2010, à 23:25
- Ptilutin
Re : bash : utiliser la commande cd pour changer de repertoire
merci quand meme pour ton aide
En fait le export ne fonctionne que dans le sens processus pere vers processus fils je crois...
cest un casse tete ce truc, jme demande si c'est vraiment possible.. :s
Dernière modification par Ptilutin (Le 22/03/2010, à 23:25)
Hors ligne
#4 Le 22/03/2010, à 23:27
- MrAzerty
Re : bash : utiliser la commande cd pour changer de repertoire
Ça, ça marche:
#!/bin/bash
cd /media/sdc1
return 0
Par contre, pour l'utiliser, il faut le "sourcer", en l'apellant avec ". " (point espace) devant.
Si ton fichier s'appelle /home/toto/script.sh:
. /home/toto/script.sh
Le "." sert à récupérer les variables du script exécuté (je pensai que "export" le faisait aussi, mais en fait non.)
Dernière modification par MrAzerty (Le 22/03/2010, à 23:27)
On est toujours le geek de quelqu'un.
Hors ligne
#5 Le 22/03/2010, à 23:31
- Ptilutin
Re : bash : utiliser la commande cd pour changer de repertoire
ah merci super ca marche !!!
J'avais déja vu sur internet cette histoire du point devant, mais avec moi ca tuait mon shell, et c'était parce que j'utilisais exit. Avec return 0 ca marche impecc alors merci à toi d'avoir trouvé
apres il suffit de se faire un petit alias dans le .bashrc pour pas a avoir a taper ce foutu point
alias go='. go'
Dernière modification par Ptilutin (Le 23/03/2010, à 14:44)
Hors ligne
#6 Le 23/03/2010, à 01:01
- nesthib
Re : bash : utiliser la commande cd pour changer de repertoire
sinon tu peux aussi utiliser un alias ou une function
alias mondossier='cd /le/chemin/vers/mon/dossier'
function mondossier () {
cd /le/chemin/vers/mon/dossier
[…]
}
à définir dans le ~/.bashrc pour le garder au lancement du terminal
GUL Bordeaux : Giroll – Services libres : TdCT.org
Hide in your shell, scripts & astuces : applications dans un tunnel – smart wget – trouver des pdf – install. auto de paquets – sauvegarde auto – ♥ awk
⃛ɹǝsn xnuᴉꞁ uʍop-ǝpᴉsdn
Hors ligne
#7 Le 23/03/2010, à 01:29
- Ptilutin
Re : bash : utiliser la commande cd pour changer de repertoire
oui les alias je connais mais la c'est dans l'optique de faire un petit script pour creer une sorte de commande cd mais qui permet d'atteindre des repertoires sans specifier tout le chemin.^^
En gros ca revient quasiment au meme mais mon script sera plus simple a utiliser (plutot que devoir rajouter a chaque fois des alias pour chaque dossier etc...)
Hors ligne
#8 Le 23/03/2010, à 08:48
- nesthib
Re : bash : utiliser la commande cd pour changer de repertoire
dans ce cas tu peux utiliser ces fonctions (à ajouter dans ton .bashrc)
function ADD () {
if [[ $1 == "-l" ]]; then
cat ~/.CD | sed 's/^cd //'
return 0
elif [ -d "$1" ]; then
echo "cd $1" >> ~/.CD
else
echo "cd $PWD" >> ~/.CD
fi
sort ~/.CD -o ~/.CD
}
function CD () {
if [ $# -eq 0 ] ; then
cd ~/
else
`grep $1 ~/.CD`
fi
}
quand tu veux ajouter un répertoire à la liste de raccourcis tape ADD si tu es dedans sinon ADD /chemin/…
ADD -l pour lister les raccourcis
pour aller dans un répertoire tape CD motif où le motif est une portion du nom permettant d'identifier de façon unique ton chemin. En cas d'ambigüité tu seras placé dans le premier répertoire dans l'ordre alphabétique
j'ai trouvé cette idée je ne sais plus trop où et je l'ai modifiée pour correspondre à mes besoins. Tu pourras aisément faire de même si cela ne te correspond pas parfaitement
GUL Bordeaux : Giroll – Services libres : TdCT.org
Hide in your shell, scripts & astuces : applications dans un tunnel – smart wget – trouver des pdf – install. auto de paquets – sauvegarde auto – ♥ awk
⃛ɹǝsn xnuᴉꞁ uʍop-ǝpᴉsdn
Hors ligne
#9 Le 23/03/2010, à 14:24
- Ptilutin
Re : bash : utiliser la commande cd pour changer de repertoire
cette facon de faire ressemble un peu a la mienne.
Par contre moi je me sers d'etiquettes dans le fichier des repertoires.
Par exple :
e /media/sdc1
f /media/sdd1
r /
. /home/user
ce qui permet de lever les ambiguites sur des noms de repertoires similaires par rapport au fichier .CD. Ou meme dans le cas ou par exemple dans le chemin vers un repertoire il y aurait la sequence qui correspondrait a un repertoire auquel on veut acceder mais qui est plus bas dans le fichier..
Je vais voir pour essayer de trouver la meilleure maniere
Sinon un truc qui serait bien serait de rajouter l'autocompletion (pour passer en mode super flemmard )
Par contre l'inconvenient de mon truc c'est qu'on peut oublier le nom des etiquettes a force. Bon on peut lister le fichier au pire, mais le vrai truc ideal c'est utiliser les vrais noms des repertoires, mais qu'en cas d'ambiguite il nous affiche les differents repertoire possible avec un numero a taper devant chacun pour decider lequel on voudrais aller.
Bon je vais y reflechir
Dernière modification par Ptilutin (Le 23/03/2010, à 14:48)
Hors ligne
#10 Le 23/03/2010, à 14:33
- credenhill
Re : bash : utiliser la commande cd pour changer de repertoire
hello
il y a aussi popd et pushd qui peuvent t'intéresser
popd
popd [+N | -N] [-n]
Remove the top entry from the directory stack, and cd to the new top directory.
...
pushd
pushd [-n] [+N | -N | dir ]
Save the current directory on the top of the directory stack and then cd to dir.
...
Hors ligne
#11 Le 23/03/2010, à 14:42
- Ptilutin
Re : bash : utiliser la commande cd pour changer de repertoire
ah ouais marrant ces commandes.
Mais la ce serait plus dans le cas ou on a un ordre precis de repertoire ou aller qu'on a sauve avec pushd et qu'on veut pas retaper ben on utilise popd un peu comme un "cd -" ameliore^^
Dernière modification par Ptilutin (Le 23/03/2010, à 14:49)
Hors ligne
#12 Le 23/03/2010, à 16:55
- nesthib
Re : bash : utiliser la commande cd pour changer de repertoire
Sinon un truc qui serait bien serait de rajouter l'autocompletion (pour passer en mode super flemmard )
ça peut se faire
Par contre l'inconvenient de mon truc c'est qu'on peut oublier le nom des etiquettes a force. Bon on peut lister le fichier au pire, mais le vrai truc ideal c'est utiliser les vrais noms des repertoires, mais qu'en cas d'ambiguite il nous affiche les differents repertoire possible avec un numero a taper devant chacun pour decider lequel on voudrais aller.
j'y avais pensé mais je ne l'ai pas fait n'en ayant pas vraiment l'utilité. C'est très facilement faisable, si j'y pense je regarderai ça ce soir.
GUL Bordeaux : Giroll – Services libres : TdCT.org
Hide in your shell, scripts & astuces : applications dans un tunnel – smart wget – trouver des pdf – install. auto de paquets – sauvegarde auto – ♥ awk
⃛ɹǝsn xnuᴉꞁ uʍop-ǝpᴉsdn
Hors ligne
#13 Le 16/06/2010, à 21:51
- nordinatueur
Re : bash : utiliser la commande cd pour changer de repertoire
Coucou à tous !
Ça faisait un bail que je n'avais pas touché à bash, ni bidouillé mon unbuntu... D'ailleurs je ne suis même pas encore passé à Lucid ! (en plus je suis en bretagne pour un bout de temps et j'ai oublié le live cd.)
Bref en cherchant pour retrouver pushd et popd je suis tombé chez vous et je vous ferais bien partager mon expérience de fonction "cd" avec un historique :
cdh () {
cdhisto=~/.cdhisto;
touch $cdhisto;
if [[ ! $CDHIST ]]; then export CDHIST=$(cat $cdhisto | wc -l); fi;
if [[ $1 == "-l" ]]; then
cat $cdhisto;
elif [[ $1 == "-0" ]]; then
export CDHIST=$(cat $cdhisto | wc -l);
cd $(tail -1 $cdhisto);
elif [[ $1 == "-c" ]]; then
rm -f $cdhisto;
elif [[ $1 == "--" ]]; then
if [[ $CDHIST -gt 1 ]]; then
export CDHIST=$(( $CDHIST-1 ));
cd $(sed -n "${CDHIST}p" $cdhisto );
else
echo "Vous êtes au début de l'historique, vous ne pouvez plus remonter."
fi;
elif [[ $1 == "++" ]]; then
if [[ $CDHIST -lt $(cat $cdhisto | wc -l) ]]; then
export CDHIST=$(( $CDHIST+1 ));
cd $(sed -n "${CDHIST}p" $cdhisto );
else
echo "Vous êtes à la fin de l'historique, vous ne pouvez pas aller plus loin."
fi;
else
cd $1 && echo "$PWD" >> $cdhisto;
fi;
}
Voilà, au passage, j'en ai profité pour améliorer un peu les fonctions ADD et CD de nesthib avec les idées de Ptilutin. Ce que je devrais aussi insérer dans mon « cdh » ci-dessus, mais chaque chose en son temps. Tant d'intérêt, tant de projets, si peu de temps !
CD () {
ifs=$IFS;
cdlog=~/.CD
if [ $# -eq 0 ] ; then
cd ~/
elif [[ $1 == "-l" ]]; then
cat $cdlog | sed 's/^cd //'
else
nblignes=$( grep -i $1 $cdlog | wc -l )
if [[ $nblignes == 0 ]]; then
IFS=$'\n';
select ligne in $(cat $cdlog | sed 's,^cd ,,'); do
cd $ligne && echo $ligne;
break;
done;
elif [[ $nblignes == 1 ]]; then
cd $( grep $1 $cdlog ) && echo $(grep $1 $cdlog);
else
IFS=$'\n';
select ligne in $(grep -i $1 $cdlog | sed 's,^cd ,,'); do
cd $ligne && echo $ligne;
break;
done;
fi;
fi
IFS=$ifs;
}
addCD () {
cdlog=~/.CD;
if [[ $1 == "-l" ]]; then
cat $cdlog
return 0
elif [ -d "$1" ]; then
echo $(cd $1; pwd) >> $cdlog
elif [ ! -d "$1" ]; then
echo "$1 n'est pas un répertoire";
else
echo "$PWD" >> $cdlog
fi
sort $cdlog -o $cdlog
}
Voilà, si vous avez des suggestions pour l'améliorer, c'est ce qui me manque pour avancer ! :-D
À bientôt !
P.S. Un truc me chiffonne : Peut-on modifier le répertoire du shell père sans modifier celui du shell fils ?
Parce que la technique ici ne le permet pas vraiment. En utilisant le point, toute modification de shell fils entraine un modif dans le shell père.
[Edit] : Sinon, pour améliorer l'historique je viens de penser à un truc que j'avais fait du genre :
if [ "$( grep -E ^c[0-9]+$ <<<"$hist")" ]; then
nb=$( echo $hist | grep -Eo "[0-9]+")
Blabla ...
Dernière modification par nordinatueur (Le 16/06/2010, à 22:34)
Linux User #508094
Pour une meilleure coopération, utilisez des liens relatifs sur le forum !
Hors ligne
#14 Le 16/06/2010, à 22:59
- nesthib
Re : bash : utiliser la commande cd pour changer de repertoire
une remarque rapide (je n'ai pas tout lu en détail).
évite les trucs inutiles du genre :
cat $cdlog | sed 's/^cd //'
echo $hist | grep -Eo "[0-9]+"
alors qu'il suffit de faire :
sed … fichier
grep … <<<$variable
edit : « si j'y pense je regarderai ça ce soir. » oups… faut croire que j'avais oublié
Dernière modification par nesthib (Le 16/06/2010, à 23:03)
GUL Bordeaux : Giroll – Services libres : TdCT.org
Hide in your shell, scripts & astuces : applications dans un tunnel – smart wget – trouver des pdf – install. auto de paquets – sauvegarde auto – ♥ awk
⃛ɹǝsn xnuᴉꞁ uʍop-ǝpᴉsdn
Hors ligne
#15 Le 17/06/2010, à 23:07
- nordinatueur
Re : bash : utiliser la commande cd pour changer de repertoire
Pour "cat/sed", bien qu'il m'arrive souvent de n'utiliser que "sed" je préfère utiliser cat avant lorsque je manipule des fichiers de données comme ceux-là. De cette menière lorsque je veux ajouter une fonctionnalité qui demande de compter les lignes par le bas j'ai le reflèxe "tac/sed". Je ne maîtrise pas assez bien sed pour ça.
Par contre ici c'est vraiment bête, c'est uniquement parce que c'est un script que j'ai commencé en étant nul, et fini en étant médiocre.
Pour "grep/<<<", par contre je suis d'accord, surtout que je l'utilise sur la ligne juste au dessus ! :-D
Linux User #508094
Pour une meilleure coopération, utilisez des liens relatifs sur le forum !
Hors ligne
#16 Le 26/01/2011, à 16:49
- marnout
Re : bash : utiliser la commande cd pour changer de repertoire
Je ne sais pas si je ne suis pas à côté de la plaque, car je n'ai pas tout compris. Voici cependant ma solution :
J'ai une partition /data dans laquelle j'ai des dossiers bin, ..., src, toile, www.
J'ai ajouté dans mon .bashrc :
DATA='/data'
function data() {
if [ $# -eq 0 ]
then
cd $DATA
else
cd ${DATA}/$1
fi
}
Ainsi pour aller dans /data je tape dans mon terminal : data et pour aller par exemple dans /data/src je tape data src.
Dernière modification par marnout (Le 26/01/2011, à 16:51)
Hors ligne
#17 Le 26/01/2011, à 18:21
- nesthib
Re : bash : utiliser la commande cd pour changer de repertoire
Le test ne sert à rien.
En plus simple :
function data () {
cd ${DATA%/}/$1
}
GUL Bordeaux : Giroll – Services libres : TdCT.org
Hide in your shell, scripts & astuces : applications dans un tunnel – smart wget – trouver des pdf – install. auto de paquets – sauvegarde auto – ♥ awk
⃛ɹǝsn xnuᴉꞁ uʍop-ǝpᴉsdn
Hors ligne
#18 Le 26/01/2011, à 21:27
- ehmicky
Re : bash : utiliser la commande cd pour changer de repertoire
Ou sinon tu peux rajouter dans ton .bashrc :
CDPATH="/data"
qui est justement prévu pour ça.
Sinon, pour la question de l'historique et la question originale (naviguer directement vers un fichier prédéfini en ne mettant qu'une partie de son chemin), j'ai justement fait un script dans cette idée.
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