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 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 ? hmm

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 wink

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 !!! smile

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é wink

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 : GirollServices libres : TdCT.org
Hide in your shell, scripts & astuces :  applications dans un tunnelsmart wgettrouver des pdfinstall. auto de paquetssauvegarde 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 smile


GUL Bordeaux : GirollServices libres : TdCT.org
Hide in your shell, scripts & astuces :  applications dans un tunnelsmart wgettrouver des pdfinstall. auto de paquetssauvegarde 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 smile
Sinon un truc qui serait bien serait de rajouter l'autocompletion (pour passer en mode super flemmard lol )

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 smile

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. smile

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

Ptilutin a écrit :

Sinon un truc qui serait bien serait de rajouter l'autocompletion (pour passer en mode super flemmard lol )

ça peut se faire wink

Ptilutin a écrit :

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 : GirollServices libres : TdCT.org
Hide in your shell, scripts & astuces :  applications dans un tunnelsmart wgettrouver des pdfinstall. auto de paquetssauvegarde 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

wink

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 : GirollServices libres : TdCT.org
Hide in your shell, scripts & astuces :  applications dans un tunnelsmart wgettrouver des pdfinstall. auto de paquetssauvegarde 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 : GirollServices libres : TdCT.org
Hide in your shell, scripts & astuces :  applications dans un tunnelsmart wgettrouver des pdfinstall. auto de paquetssauvegarde 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