OVH Cloud OVH Cloud

[un peu HS] Problème bash

24 réponses
Avatar
Tanguy Briançon
Bonjour,

Sous un shell (Bash ou autre). Je suis dans un repertoire du genre
/home/moi/un/chemin/pas/simple
Je fais
cd /un/chemin/long/
(en une commande)
existe t'il une commande du genre
cd répéretoire précédant?
(Comme le back d'un navigateur).

Le cd ~ permet de revenir rapidement dans /home/moi mais
pour revenir dans le répertoire précédant?

10 réponses

1 2 3
Avatar
lunix
Le 13/06/2012 14:41, Tonton Th a écrit :
On 06/13/2012 02:32 PM, lunix wrote:

je suis dans /home/moi/rep1/rep2/

Si je fais cd .. je me retrouve dans /home/moi/rep1/



Et avec "cd -", tu vas aller où ?




Dans le répertoire home de l'user

si je suis dans /home/moi/rep1/rep2/rep3

en faisant cd - je me retrouve dans /home/moi

en faisant cd .. dans /home/moi/rep1/rep2

Il parle bien de répertoire précédent dans le post.
Avatar
lunix
Le 13/06/2012 14:43, lunix a écrit :
Le 13/06/2012 14:41, Tonton Th a écrit :
On 06/13/2012 02:32 PM, lunix wrote:

je suis dans /home/moi/rep1/rep2/

Si je fais cd .. je me retrouve dans /home/moi/rep1/



Et avec "cd -", tu vas aller où ?




Dans le répertoire home de l'user

si je suis dans /home/moi/rep1/rep2/rep3

en faisant cd - je me retrouve dans /home/moi



Et en faisant "cd " tout court on se retrouve aussi dans /home/moi


en faisant cd .. dans /home/moi/rep1/rep2

Il parle bien de répertoire précédent dans le post.
Avatar
jj.retorre
lunix disait le 06/13/12 que :

Le 13/06/2012 14:21, Francois Lafont a écrit :
Le 13/06/2012 14:15, lunix a écrit :
Le 12/06/2012 18:06, Olivier Miakinen a écrit :
Le 12/06/2012 18:01, Tanguy Briançon a écrit :

existe t'il une commande du genre
cd répertoire précédant?



cd -



Je fais toujours cd ..



Ça c'est pour le répertoire "parent". Ce n'est pas forcément la même
chose que le répertoire "précédent", qui est l'avant dernier répertoire
dans lequel se trouvait l'utilisateur.

cd ~
cd /etc
cd - # « cd .. » ne donnera pas la même chose.




En faisant cd .. ça me ramène toujours dans le répertoire précédent.

cd - ramène dans le répertoire de l'user chez moi.

Il parle du répertoire précédent.



Répertoire précédent fait référence à un ordre.
Précédent dans l'ordre chronologique n'est en général pas le même que le
précédent dans l'arborescence (ordre hiérarchique).
Je pense que l'initiateur du fil voulait parler de l'ordre
chronologique. En tout cas, ça a été compris comme ça.

--
JJR
Avatar
lunix
Le 13/06/2012 15:05, JJ. Rétorré a écrit :

Répertoire précédent fait référence à un ordre.
Précédent dans l'ordre chronologique n'est en général pas le même que le
précédent dans l'arborescence (ordre hiérarchique).
Je pense que l'initiateur du fil voulait parler de l'ordre
chronologique. En tout cas, ça a été compris comme ça.




je suis dans un /home/moi/rep1/rep2/rep3

je fais "cd .." je me retrouve dans /home/moi/rep1/rep2

pour aller a /home/moi/rep1 direct il faut faire "cd /home/moi/rep1"

Il parlait d'une commande qui ramène au répertoire précédent avec une
commande comme cd ~ qui ramène au /home/moi

Répertoire précédent il y a qu'une seule signification,le répertoire
juste avant ou on était,il dit l'exemple avec le back du navigateur pour
revenir une page en arrière.
Avatar
Francois Lafont
Bon, je la refais. :-)

$ cd ~/Bureau
$ mkdir rep1 rep2 # je crée 2 répertoires sur le bureau
$ cd rep1/
$ cd ~/Bureau/rep2

Maintenant voyons deux scénarios :

* Scénario 1, je tape :

$ cd ..

Là je me retrouve dans le répertoire parent de ~/Bureau/rep2, donc je me
retrouve dans ~/Bureau.

* Scénario 2, je tape :

$ cd -

Là, je me retrouve dans le répertoire précédent, ie celui dans lequel
j'étais avant d'être dans ~/Bureau/rep2, et il s'avère qu'il s'agit de
~/Bureau/rep1.

Et histoire de bien enfonce le clou, dans le scénario 2, fais :

$ cd -
$ cd -
$ cd -
$ cd -
$ cd -
etc...

On bascule sans arrêt de ~/Bureau/rep1 à ~/Bureau/rep2.

Il est clair qu'avec :

$ cd ..
$ cd ..
$ cd ..
$ cd ..
$ cd ..
etc...

Le comportement est très différent.

C'est clair maintenant ?

--
François Lafont
Avatar
lunix
Le 13/06/2012 15:50, Francois Lafont a écrit :
Bon, je la refais. :-)

$ cd ~/Bureau
$ mkdir rep1 rep2 # je crée 2 répertoires sur le bureau
$ cd rep1/
$ cd ~/Bureau/rep2

Maintenant voyons deux scénarios :

* Scénario 1, je tape :

$ cd ..

Là je me retrouve dans le répertoire parent de ~/Bureau/rep2, donc je me
retrouve dans ~/Bureau.

* Scénario 2, je tape :

$ cd -

Là, je me retrouve dans le répertoire précédent, ie celui dans lequel
j'étais avant d'être dans ~/Bureau/rep2, et il s'avère qu'il s'agit de
~/Bureau/rep1.

Et histoire de bien enfonce le clou, dans le scénario 2, fais :

$ cd -
$ cd -
$ cd -
$ cd -
$ cd -
etc...

On bascule sans arrêt de ~/Bureau/rep1 à ~/Bureau/rep2.

Il est clair qu'avec :

$ cd ..
$ cd ..
$ cd ..
$ cd ..
$ cd ..
etc...

Le comportement est très différent.

C'est clair maintenant ?




Oui je comprend ,je viens d'essayé,j'ai appris un truc mais j'ai jamais
eu l’utilité de basculer dans le répertoire avant
et cd - me ramené au home parce que je démarrais toujours du home.
Avatar
Nicolas George
Tonton Th , dans le message <4fd88a61$0$6831$, a
écrit :
Et avec "cd -", tu vas aller où ?



Dans le répertoire où on était juste avant qu'on change pour la dernière
fois.

Si tu es dans /usr/lib et que tu fais « cd /etc/X11 », tu te retrouves donc
dans /etc/X11 ; alors :

cd .. t'amène au répertoire parent, donc /etc ;
cd - t'amène au répertoire précédent, donc /usr/lib ;
cd tout court t'amène dans $HOME, soit probablement /home/truc.
Avatar
lunix
Le 13/06/2012 17:07, Nicolas George a écrit :
Tonton Th , dans le message<4fd88a61$0$6831$, a
écrit :
Et avec "cd -", tu vas aller où ?



Dans le répertoire où on était juste avant qu'on change pour la dernière
fois.

Si tu es dans /usr/lib et que tu fais « cd /etc/X11 », tu te retrouves donc
dans /etc/X11 ; alors :

cd .. t'amène au répertoire parent, donc /etc ;
cd - t'amène au répertoire précédent, donc /usr/lib ;
cd tout court t'amène dans $HOME, soit probablement /home/truc.



Oui j'ai compris la différence entre répertoire parent et répertoire
précédent.
Je comprends vite mais il faut m'expliquer longtemps.

Ce qui ma aussi induit en erreur j'utilise tous le temps su.
Je sais qu'il faut faire su - pour être dans le répertoire /root sinon
on se retrouve dans le /home/user.
J'étais persuadé que - représentait le home de l'utilisateur.
Avatar
Damien Wyart
* lunix in fr.comp.os.linux.configuration:
Ce qui ma aussi induit en erreur j'utilise tous le temps su.
Je sais qu'il faut faire su - pour être dans le répertoire /root sinon
on se retrouve dans le /home/user.
J'étais persuadé que - représentait le home de l'utilisateur.



$ man su

[...]

NAME
su - change user ID or become superuser

SYNOPSIS
su [options] [username]

[...]

Invoked without a username, su defaults to becoming the superuser.
The optional argument - may be used to provide an environment
similar to what the user would expect had the user logged in
directly.

[...]

-, -l, --login
Provide an environment similar to what the user would expect
had the user logged in directly.

--
DW
Avatar
Damien Wyart
[ Crosspost et fu2 sur fr.comp.os.unix ]

> > cd -

> Et si on veut plus d'historique on change de répertoire avec pushd,
> et on revient d'un pas en arrière avec popd

> par exemple (en commençant dans d)

> pushd a -> on arrive dans a
> pushd b -> on arrive dans b
> popd -> retour dans a
> popd -> retour dans d



* Tanguy Briançon in fr.comp.os.linux.configuration:
Pour moi l'idéal serait la chose suivante: une commande: puis
2 touches (ou une combinaison de deux touches: les flèches ont
d'autres fonctions) permettant de naviguer dans les derniers
répertoire visités.



Je ne connais pas de moyen d'avoir exactement cela mais on peut s'en
approcher (voir parmi les suggestions que je liste plus loin).

La réponse à la question initiale a été apportée, ainsi que des
compléments sur pushd/popd. En relisant le fil, je me suis souvenu de
quelques notes que j'avais sur le thème de l'optimisation des
changements de répertoire dans un shell interactif ; je me suis dit que
c'était l'occasion de les partager, ça pourra peut-être être utile au PO
ou aux lurkers même si c'est presque HS...

Voici donc des compléments en vrac (certains sont génériques, d'autres
spécifiques bash ou zsh, je vais essayer de le préciser) :

- si on se rend souvent dans quelques répertoires qui ne changent pas,
le plus simple est sans doute d'avoir quelques alias courts "en dur" :
alias _rep1Í /mon/premier/long/rep/ou/je/vais/souvent

- la variable d'environnement CDPATH, qui permet de lister des
répertoires dans lesquels le shell fera une recherche lors d'un "cd
rep" (changement relatif et non absolu) ; par défaut, la variable
n'est pas définie et la recherche a lieu uniquement dans le répertoire
courant. Utiliser CDPATH est parfois déroutant ou source d'erreurs,
mais ça peut aussi faire gagner du temps.

- les options CDABLE_VARS (zsh) et cdable_vars (bash) qui permettent de
stocker des chemins dans des variables du shell et de passer à cd le
nom de ces variables.

- l'option AUTO_PUSHD (zsh) qui empile le chemin lors d'un cd comme si
on avait utilisé pushd ; revient à faire un alias cd=pushd mais si on
a en plus l'option AUTO_CD (point suivant), on peut juste taper le nom
du répertoire (sans "cd") et il sera empilé.

- les options AUTO_CD (zsh) et autocd (bash) : quand on entre le nom
d'un répertoire, "cd " devant est sous-entendu.

- les forme cd ~+N et cd ~-N (où N est un nombre) permet d'aller piocher
directement dans la pile de répertoires, qui peut être affichée avec
"dirs -v". Et avec zsh, on a en plus la complétion sur TAB et le
"cycling" dans la liste (on peut même omettre le ~ donc faire "cd
+<TAB>" ce qui est proche de la demande de l'OP (mais pas mappé sur
une touche, et pas en bash ;-).

- Enfin (mais toujours du copieux :), une foultitude d'outils améliorant
ou complétant cd existent, basés soit sur la notion de bookmarks, soit
sur de la complétion "floue", soit sur des patterns, soit sur un
joyeux mélange... Certains sont assez anciens, comme CDargs, qui
comporte en plus une interface curses pour piocher dans la liste des
répertoires. Voici une liste assez complète (!), je vous laisse faire
votre marché ;)

Ceux qui sont packagés dans Debian :
http://www.skamphausen.de/cgi-bin/ska/CDargs
http://xd-home.sourceforge.net/xdman.html
http://waterlan.home.xs4all.nl/ (outil wcd)
http://github.com/joelthelion/autojump
http://savannah.nongnu.org/projects/go2/

Et les autres (certains comme z sont assez populaires, il en existe
une variante pour zsh) :
http://github.com/rupa/j
http://github.com/rupa/j2
http://github.com/rupa/z
http://github.com/sjl/z-zsh
http://github.com/twerth/bashmarks
http://github.com/philc/fuzzycd
http://github.com/MarcWeber/path-selector
http://github.com/karlin/working-directory

Voilà, fin du roman pour aujourd'hui ; comme vous le voyez, il y a de
quoi optimiser ce bon vieux "cd"...

--
DW
1 2 3