Navigation rapide dans le shell bash

119

Je voudrais fréquemment basculer entre les répertoires qui se trouvent dans des chemins totalement indépendants, par exemple, /Project/Warnest/docs/et ~/Dropbox/Projects/ds/test/.

Mais je ne veux pas taper cd /[full-path]/tout le temps. Existe-t-il des commandes de raccourci pour basculer vers des répertoires précédemment travaillés?

Une solution à laquelle je pourrais penser est d’ajouter des variables d’environnement à mes bash .profilerépertoires fréquemment utilisés et cdà ceux-ci utilisant ces variables.

Mais y a-t-il une autre solution à cela?

saiy2k
la source
Des liens symboliques pourraient également être utiles à cet égard. fr.wikipedia.org/wiki/…
user606723

Réponses:

135

Si vous ne faites que basculer entre deux répertoires, vous pouvez utiliser cd -pour aller et venir.

Chris Card
la source
13
Comment cela m'a échappé pendant si longtemps est un mystère. Merci beaucoup pour cet excellent conseil.
M. Shickadance le
3
+1 Certainement l'un de mes favoris et celui que de nombreux experts ont «raté».
Michael Durrant
62

Il y a une variable shell CDPATHdans bashet kshet cdpathdans zsh:

CDPATH    The search path for the cd command. This is a colon-separated
          list of directories in which the shell looks for destination
          directories specified by the cd command.

Vous pouvez donc définir dans votre ~ / .bashrc:

export CDPATH=/Project/Warnest:~/Dropbox/Projects/ds

Ensuite cd docset vous cd testmènera au premier répertoire trouvé. (Je veux dire, même si un répertoire portant le même nom existera dans le répertoire actuel, il CDPATHsera toujours consulté. Si CDPATHcontient plus de répertoires contenant des sous-répertoires portant le même nom, le premier sera utilisé.)

homme au travail
la source
16
Il convient de mentionner qu'en général, vous souhaiterez que la première entrée $CDPATHsoit .(une entrée explicite, c'est-à-dire qu'elle :fonctionne également). Sinon, vous obtiendrez le comportement étrange où les CDPATHrépertoires ont priorité sur les répertoires du répertoire de travail actuel, ce que vous ne voulez probablement pas.
jw013
4
Je fais à peu près la même chose, mais sans le export. De cette façon, CDPATHn’est pas exporté vers des scripts aux effets potentiellement étranges ou nocifs. Voir ici pour plus de discussion et d’exemples.
Télémaque
"bash et ksh et cdpath dans zsh" ... et dans tcsh (répondant à une question basée sur celle-ci sur Super User et l’ayant trouvée en cherchant des réponses similaires sur SE).
Hennes
Ceci est spécifié par POSIX, je pense. Au moins, le POSIX pour s'y cdréfère.
mikeserv
48

Vous pouvez également essayer un outil appelé autojump . Il conserve une base de données d'appels à son alias ( jpar défaut) et tente de prendre des décisions intelligentes quant à l'endroit où vous souhaitez aller. Par exemple, si vous tapez fréquemment:

j ~/Pictures

Vous pouvez utiliser ce qui suit pour vous y rendre rapidement:

j Pic

Il est disponible sous Debian et Ubuntu, et inclus par utilisateur dans ~/.bashrcou ~/.zshrcpar défaut.

Kyle Smith
la source
5
Autojump est probablement le meilleur outil pour cela. Il faut un peu de temps pour construire la base de données des répertoires courants, mais une fois que ce sera fait, vous constaterez que vous ne pourrez pas vous en passer. Je sais que chaque fois que je suis sur l'ordinateur de quelqu'un d'autre, je me sens handicapé.
quodlibetor
1
merci j'adore cet outil! Et bien qu'il cd -soit pratique de savoir si vous ne le connaissez pas déjà, je pense que c'est une bien meilleure solution que la réponse actuelle.
Utilisateur
Installé à l'échelle du système sur quels systèmes?
ctrl-alt-delor
1
@richard Il est disponible sous forme de paquet (par exemple apt-get install autojumpdans Ubuntu, mais aussi pour de nombreux autres, comme indiqué sur leur page) pour une installation à l'échelle du système, mais chaque utilisateur doit le charger dans son environnement shell afin de pouvoir remplacer cd afin de garder trace de où vous allez
nealmcb
Important à dire, source /usr/share/autojump/autojump.shdevrait être ajouté à ~ / .bashrc pour que le saut automatique fonctionne .
Pablo Un
39

S'il s'agit d'un petit nombre de répertoires, vous pouvez utiliser pushdpour effectuer une rotation entre eux:

# starting point
$ pwd
/Project/Warnest/docs
# add second dir and change to it
$ pushd ~/Dropbox/Projects/ds/test
~/Dropbox/Projects/ds/test /Project/Warnest/docs
# prove we're in the right place
$ pwd
~/Dropbox/Projects/ds/test
# swap directories
$ pushd
/Project/Warnest/docs ~/Dropbox/Projects/ds/test

contrairement à cd -, vous pouvez utiliser cela avec plus de deux répertoires


Pour donner suite à la suggestion de Noach, j'utilise maintenant ceci:

function pd()
{
    if [[ $# -ge 1 ]];
    then
        choice="$1"
    else
        dirs -v
        echo -n "? "
        read choice
    fi
    if [[ -n $choice ]];
    then
        declare -i cnum="$choice"
        if [[ $cnum != $choice ]];
        then #choice is not numeric
            choice=$(dirs -v | grep $choice | tail -1 | awk '{print $1}')
            cnum="$choice"
            if [[ -z $choice || $cnum != $choice ]];
            then
                echo "$choice not found"
                return
            fi
        fi
        choice="+$choice"
    fi
    pushd $choice
}

exemple d'utilisation:

# same as pushd +1
$ pd 1

# show a prompt, choose by number
$ pd
 0 ~/Dropbox/Projects/ds/test
 1 /Project/Warnest/docs
 2 /tmp
? 2
/tmp ~/Dropbox/Projects/ds/test /Project/Warnest/docs

# or choose by substring match
$ pd
 0 /tmp
 1 ~/Dropbox/Projects/ds/test
 2 /Project/Warnest/docs
? doc
/Project/Warnest/docs /tmp ~/Dropbox/Projects/ds/test

# substring without prompt
$ pd test
~/Dropbox/Projects/ds/test /Project/Warnest/docs /tmp

etc. Évidemment, ceci est juste pour faire une rotation dans la pile et ne gère pas l'ajout de nouveaux chemins - je devrais peut-être le renommer.

Inutile
la source
6
Je savais pour pushdet popdsur la traversée, mais pas que pushd puisse faire la rotation de ce qui a été utilisé jusqu'à présent ...
Izkata
14

J'utilise aliasdans Bashrc pour faire ces cds.
tel que:

alias wdoc='cd ~/Project/Warnest/docs'
alias dstest='cd ~/Dropbox/Projects/ds/test'
Felix Yan
la source
bashrc est-il un fichier similaire au fichier .profile? dans lequel je dois ajouter ces lignes?
Saiy2k
~/.bashrcou /etc/bash.bashrc. Je ne l'avais pas utilisé .profileauparavant, alors je ne connais pas la relation entre eux :-(
Felix Yan le
les scripts bashrc commenceront chaque fois que vous ouvrirez un terminal. profil avec démarrage.
ajouté ces lignes à mon .bash_profileet cela fonctionne très bien .. thx :)
saiy2k
J'ai plusieurs dossiers de projet spécifiques auxquels je vais régulièrement, c'est le moyen le plus simple de les configurer et de les entretenir. En outre, pour moi, il en résulte le nombre absolu de caractères tapés de toutes les solutions ici. BAISER! :-)
moodboom
11

J'ai trouvé un script (généralement appelé acd_funch.sh) qui a résolu ce problème pour moi. Avec cela, vous pouvez taper cd --pour voir les 10 derniers répertoires que vous avez utilisés. Ça va ressembler à quelque chose comme ça:

0  ~/Documents/onedir
1  ~/Music/anotherdir
2  ~/Music/thirddir
3  ~/etc/etc

Pour aller ~/Music/thirddirsimplement tapercd -2

Références

NOTE: Ce script a été publié à l'origine dans un article de la gazette linux disponible à l' adresse suivante : acd_func.sh - étend le CD de bash pour conserver, afficher et accéder à l'historique des noms de répertoires visités .

doyen
la source
Le même script a également été publié dans la Linux Gazette, numéro 109, décembre 2004 .
Serge Stroobandt
@Dean Le lien mène à une vidéo musicale et indique que Geocities a été fermé.
Quelque chose de quelque chose
1
@somethingsomething Ajout de liens alternatifs.
Dean
histoire | grep cd
user2180794
10

Essayez l' cdable_varsoption shell en bash. Vous l'allumez avec shopt -s cdable_vars.

Ensuite, vous devez définir vos variables export dir1=/some/path. et enfin cd dir1, etc. Vous pouvez ensuite le mettre dans votre ~/.bashrcpour le faire coller.

Wojtek Rzepala
la source
10

Utilisez "pushd -n " (en supposant que vous utilisez bash).

Ajoutez à votre ~ / .bashrc:

pushd -n /Project/Warnest/docs/
pushd -n ~/Dropbox/Projects/ds/test/

ensuite,

cd ~ est ta maison,

cd ~1 est ~/Dropbox/Projects/ds/test/

cd ~2 est /Project/Warnest/docs/

Vous pouvez utiliser ~1, ~2etc. exactement de la même manière que ~.

Eelvex
la source
7

Il y a beaucoup de bonnes suggestions ici. Lequel utiliser dépend de si vous avez une petite liste fixe de répertoires avec lesquels vous basculez ou si vous cherchez une solution plus générique.

S'il s'agit d'une petite liste fixe, il serait plus simple d'utiliser des alias simples (comme suggéré par Felix Yan).

Si vous cherchez une solution plus généralisée (c.-à-d. Beaucoup de répertoires différents, évoluant dans le temps), utilisez pushd et popd (comme suggéré par Useless). Personnellement, je trouve le pushd / popd par défaut difficile à utiliser, en particulier lorsque vous commencez à basculer entre plusieurs dossiers; Cependant, j'ai écrit quelques modifications qui me facilitent la tâche. Ajoutez ce qui suit à votre base:

alias dirs='dirs -v'
pd () 
{ 
    if [ "$1" ]; then
        pushd "${1/#[0-9]*/+$1}";
    else
        pushd;
    fi > /dev/null
}
  • Utilisez pd(sous forme abrégée de pushd) pour accéder à un nouveau dossier en vous rappelant où vous vous trouviez.
  • Utilisez dirspour voir la liste des répertoires sauvegardés.
  • Utilisez pd 3pour accéder au répertoire numéro 3.

Exemple d'utilisation:

$ PS1='\w\$ '   ## just for demo purposes
~$ pd ~/Documents/data
~/Documents/data$ pd ../spec
~/Documents/spec$ pd ~/Dropbox/Public/
~/Dropbox/Public$ pd /tmp
/tmp$ pd /etc/defaults/
/etc/defaults$ dirs
 0  /etc/defaults
 1  /tmp
 2  ~/Dropbox/Public
 3  ~/Documents/spec
 4  ~/Documents/data
 5  ~
/etc/defaults$ pd 2
~/Dropbox/Public$ dirs
 0  ~/Dropbox/Public
 1  ~/Documents/spec
 2  ~/Documents/data
 3  ~
 4  /etc/defaults
 5  /tmp
~/Dropbox/Public$ pd 4
/etc/defaults$ dirs
 0  /etc/defaults
 1  /tmp
 2  ~/Dropbox/Public
 3  ~/Documents/spec
 4  ~/Documents/data
 5  ~
/etc/defaults$ pd 3
~/Documents/spec$ popd
~/Documents/data ~ /etc/defaults /tmp ~/Dropbox/Public
~/Documents/data$ 
Noach
la source
6

Ce qui suit semble fonctionner dans le cas sur lequel je l’ai testé, et vous pouvez simplement supprimer vos noms de répertoire sous forme de liens symboliques dans ~ / Bookmarks:

mkdir "$HOME/Bookmarks"
ln -s /tmp "$HOME/Bookmarks/testdir"

function ccd() { cd $(readlink "$HOME/Bookmarks/$1") ; }

ccd testdir && echo $PWD
# gives /tmp
Ulrich Schwarz
la source
que la fonction ccd () doit être saisie à l’invite du terminal ou ailleurs? Pouvez-vous expliquer?
Saiy2k
1
@ saiy2k: désolé, oui. La functionligne va dans votre .bashrc (vous pouvez la taper dans votre terminal pour tester, mais elle ne sera plus là quand vous fermerez cette fenêtre), les lignes avant de configurer le scénario de test de "testdir" devenant un nom /tmp, et le La dernière ligne est le test pour voir si cela fonctionne.
Ulrich Schwarz
6

Vous pourriez faire pire que d'essayer J2 .

Du README:

Passer beaucoup de temps à cd-ing autour d’une arborescence complexe?

j note où vous en êtes et combien de temps vous y passez, et constitue un moyen pratique d'accéder aux répertoires que vous utilisez réellement.

Je l'utilise abondamment et le recommande.

phildobbin
la source
5

Je conseillerais d'utiliser zsh , ce shell comme une très bonne complétion de TAB pour les répertoires, les fichiers et même les options de la plupart des programmes cli.

J'utilise cette coquille depuis des années maintenant et la fonctionnalité me manquerait si elle n'existait plus. Écrire un script pour zsh est très amusant aussi, avec un grand nombre de monolignes qui peuvent vous aider au quotidien.

polemon
la source
Pas besoin de changer en zsh pour compléter TAB puisque bash a tout de même. Pour d'autres fonctionnalités peut-être mais pas pour cela.
Peer Stritzinger
1
@PeerStritzinger Bash a introduit ce type de fonctionnalité dans BASH 4.0, mais comparé à zsh, il est encore loin derrière. Dire "tous les mêmes" est certainement incorrect.
polemon
Eh bien, zsh est exactement le übershell, mais il n’est pas nécessaire de changer d’onglet (la question a été posée pour bash). Outre bash 4.0 a été introduit il y a environ 3 ans ...
Peer Stritzinger
5

D'après mon expérience, la navigation dans un shell est accélérée par l'utilisation de la fonctionnalité de recherche d'historique. Dans Bash, vous pouvez effectuer une recherche en arrière dans votre historique des commandes en appuyant sur Ctrl+ Ret en tapant un motif. Ce modèle est ensuite comparé aux entrées précédentes de votre historique - qu’il s’agisse de cdcommandes ou d’autres opérations - et des suggestions sont formulées lors de la frappe. Appuyez simplement sur Entrée pour exécuter la commande suggérée à nouveau. Ceci est appelé reverse-search-historydans Bash et je l' aime. Cela me permet d'économiser beaucoup de frappes au clavier et ma mémoire interne.

C’est une bonne chose, car vous n’avez qu’à mémoriser une petite partie d’une commande, comme par exemple, Dropou Waà distinguer les deux entrées de l’historique cd ~/Dropbox/Projects/ds/test/et cd /Project/Warnest/docs/.


la source
5

J'utilise aussi ces alias (ajoutez-les à ~ / .bashrc):

alias ..='cd ..'
alias ...='cd ../..'
alias ....='cd ../../..'
alias .....='cd ../../../..'

Il est beaucoup plus rapide d'aller dans le répertoire supérieur avec eux (mais cela ne résout que la moitié de la navigation).

Reimai
la source
1
Ce sont des alias utiles, mais je ne suis pas tout à fait sûr qu'ils correspondent aux besoins du PO. Vous pourriez envisager d'élargir votre réponse pour suggérer en quoi ces solutions pourraient être directement utiles au problème du PO.
HalosGhost
4

si vous utilisez zsh:

  • vous n'avez pas à taper cd, il suffit de taper le chemin du répertoire ( /foo/bar/baz<Enter>égal à cd /foo/bar/baz<Enter>)

    nécessite que l' auto_cdoption soit définie

  • vous pouvez développer les chemins abrégés avec la Tabclé ( /u/sh/pi<Tab>étend à /usr/share/pixmaps; fonctionne également pour les noms de fichiers)
Andrei Dziahel
la source
3
Bash 4 a gagné shopt -s autocd, ce n'est donc plus une bonté zsh.
Gilles
4

Il existe un outil plutôt intéressant pour les changements rapides dans le répertoire:

xd - changeur de répertoire eXtra fast http://xd-home.sourceforge.net/xdman.html

un peu gênant est que vous devez le mapper dans un profil bash ou similaire, car il ne sort que le répertoire

# function to do `cd` using `xd`
# -g turns generalized directory search command processing on
# which improves the whole thing a bit
f() 
{
        cd `/usr/bin/xd -g $*`
}

vous pouvez faire des choses comme:

# change to /var/log/a* (gives you a list to choose from)    
f vla
# to skip the list and go directly to /var/log/apache2
f vlapach
nul
la source
Modifiez la fonction pour f() { cd "$(xd -g "$@")"; }gérer correctement les répertoires espacés et les espaces dans les arguments xd(vous n'avez probablement pas besoin du chemin). Si vous n'utilisez jamais xdd'une autre manière, vous pouvez alternativement le faire xd() { cd "$(command xd -g "$@")"; }(alternativement, utiliser /usr/bin/xdà la place de command xd- vous pouvez toujours courir command xd …si vous devez le contourner).
Adam Katz
4

De toute façon, vous ne devriez jamais taper le chemin complet dans un shell. Vous pouvez toujours utiliser:

soffice /P*/W*/*/mydoc*

au lieu de

soffice /Project/Warnest/docs/mydoc.odt
Gena2x
la source
1
C'est comme si vous remplissiez un onglet, mais pire à tous les égards
Michael Mrozek
Vous ne pouvez pas faire cela avec l'onglet complétant avec le nombre de touches euqal à moins que Project ne soit un fichier commençant par P, etc. De plus, vous devez attendre la fin à chaque fois, avec * vous n'avez pas besoin d'attendre.
gena2x
Je pense que vous l'avez à l'envers - vous ne pouvez le faire P*que si Project est le seul fichier commençant par P. L'achèvement de la tabulation peut se dérouler de manière cyclique (par défaut dans la plupart des shells; vous devez relier l'onglet à menu-completebash) et résoudre instantanément dans des cas simples. comme ça, rien ne l'attend
Michael Mrozek
En ce qui concerne "vous ne pouvez pas le faire" - vous pouvez, essayez, vous perdez tout votre sens si vous pensez que vous ne pouvez pas. Essayez echo / u * / b * / g ++
gena2x
1
Je comprends ce que vous voulez dire, c’est plus rapide tant que vous êtes sûr d’avoir tapé un chemin non ambigu, mais quelque chose /P*/W*/*/mydoc*comme cela pourrait bien fonctionner jusqu’au jour où vous auriez créé un autre fichier qui correspond à ce glob, et tout à coup, vous terminez. en ouvrant les deux à la fois. /u*/*/g++est impressionnant peu de caractères, mais j'espère que rien d'autre dans aucun des sous-dossiers de l'un de mes dossiers racine commençant par un'est nommé g++. (Par bon compromis, dans certaines coques, vous pouvez utiliser l'onglet pour développer les globs sur place au fur et à mesure)
Michael Mrozek
3

Il existe également OLDPWDune variable d’environnement qui, selon IEEE 1003.1 (POSIX), doit être mise à jour avec le répertoire de travail précédent à chaque cdchangement de répertoire de travail (pour les plus curieux, ligne 80244 de la page 2506 de IEEE 1003.1-2008).

njsg
la source
3

Il existe également une application "wcd" créée spécifiquement pour cela (également sur cygwin, puisque je suis dessus). Vous pouvez créer des raccourcis, des signets de répertoires avec elle. Prend également en charge les wild cards. La lecture de la page de manuel & docs dans / usr / share / wcd devrait beaucoup vous aider.

http://manpages.ubuntu.com/manpages/hardy/man7/wcd.7.html

sam
la source
3

cdargs est l'outil le plus efficace pour ajouter un répertoire à vos favoris: http://www.youtube.com/watch?v=uWB2FIQlzZg

Emon
la source
Est-ce un produit auquel vous êtes associé?
Kazark
Merci de m'avoir signalé cdargs. Simplement sudo apt-get cdargssur Ubuntu. BTW la vidéo youtube est vraiment mauvais mais l'outil est génial.
DavidG
3

Essayez fastcd ( https://github.com/frazenshtein/fastcd ) Il définit un point d' ancrage qui enregistre les répertoires visités à partir de bash. Et définit le script comme "j" alias, qui vous montre les derniers répertoires visités, avec la possibilité de cd rapidement (commencez à taper pour filtrer les répertoires). Modification de .bashrc est nécessaire pour faire le "j" alias.

Obtenir un outil

cd ~; mkdir Soft; cd Soft
git clone https://github.com/frazenshtein/fastcd

Installer les modules requis

pip install --user urwid

Source le fichier set.sh dans votre bashrc

echo -e "\nsource /home/$USER/Soft/fastcd/set.sh\n" >> ~/.bashrc

Et mettre à jour bashrc

source ~/.bashrc

Ensuite, tapez simplement "j" dans la console

Sam Toliman
la source
Comment cela marche-t-il? S'il s'agit d'alias, que fait cet outil pour vous que vous ne pouvez pas modifier manuellement .bashrc?
G-Man
Il lance un démon qui enregistre les répertoires visités dans ~ / .fastcd pour les shells lancés (bash). "j" lance un outil qui vous montre les derniers répertoires visités, avec la possibilité de cd rapidement. Modification de .bashrc est nécessaire pour faire le "j" alias. Vous pouvez voir le code source pour plus d'informations, je suppose
Sam Toliman
Merci pour votre réponse rapide. C’est le genre d’information qui devrait figurer dans la réponse. Veuillez modifier votre réponse pour inclure cette information.
G-Man
3

J'avais la même question et j'ai d'abord trouvé cette réponse . J'ai installé l'utilitaire z ( https://github.com/rupa/z ).

C’est exactement ce que vous recherchez, car z apprend de vos commandes cd et garde la trace des répertoires selon le principe de frécence (fréquente et récente). Donc, après avoir fait les deux commandes cd une fois, vous pouvez faire quelque chose comme:

z docs
z ds

pour aller à /Project/Warnest/docs/et ~/Dropbox/Projects/ds/test/respectivement. Les arguments de z sont des expressions rationnelles, vous n’avez même pas besoin de taper un nom de dossier complet.

saroele
la source
2

J'utilise mon propre utilitaire cdhiste pour gérer cela depuis de nombreuses années. Il alias votre commande cd et conserve automatiquement une pile de répertoires.

balle
la source
2

Vous pouvez utiliser exportpour affecter vos chemins de répertoire aux variables, puis les référencer.

export dir1=/Project/Warnest/docs/
export dir2= ~/Dropbox/Projects/ds/test/
cd $dir1
cd $dir2
Fahad Naeem
la source
Oui, cela suffit pour quelques répertoires préférés. Pas besoin d'installer d'autres utilitaires. Il suffit de mettre les exportdéclarations dans votre ~/.bashrc, et elles seront toujours disponibles.
Wisbucky
1

Quelques suggestions ici:

Idée la plus directe, je vais ajouter un alias dans le fichier .profile

vi ~/.profile
alias dir1='cd /myhome/onedir'
alias dir2='cd /jimmy/anotherdir'

Puis utilisez $ dir1 ou dir2, peut cd

Si vous passez toujours dans deux répertoires seulement. utiliser cd -va basculer entre eux.

Dan
la source
1

La solution que j'utilise pour cette situation est screen. Écran d'accueil et créer une fenêtre pour chaque répertoire avec C-a cet y naviguer. Basculez entre windows / directory avec C-a nou C-a p. Nommez les fenêtres avec C-a A. Ensuite, vous pouvez faire apparaître une liste de vos fenêtres C-a "et naviguer en utilisant le numéro ou le nom de la fenêtre. Dans ce cas screen, vous pouvez vous détacher de la session pour économiser votre espace de travail et vous reconnecter ultérieurement avec la même configuration.

David R. McWilliams
la source
1

Il semble que ce dont vous avez besoin est essentiellement un fichier de projet pour votre flux de travail. Avec des répertoires appartenant à votre activité, comme dans un IDE de programmation. Essayez les outils de navigation Zsh et l’outil n-cdici. Cela vous permettra de naviguer à travers les derniers dossiers visités et de définir un Hotlistrépertoire avec votre choix:

n-cd

n-cd peut être lié à une combinaison de touches avec:

zle -N znt-cd-widget

bindkey "^ T" znt-cd-widget

Adam Lisson
la source
1

TL; DR

  1. Utilisez un Fishshell interactif que vous donner les moyens immédiatement ( fish> zsh> bash).
  2. Utilisez POSIX/ Bashpour les scripts qui est la syntaxe plus largement pris en charge ( POSIX> Bash> Zsh> Fish).

Coquilles

Après avoir testé différents coques, voici mes commentaires (par ordre d’essai / adoption):

  • Bash:
    • auto-complétion: basique;
    • expansion du chemin: non;
    • script: excellent.
  • Zsh+ oh-my-zsh:
    • auto-complétion: bonne (passage à travers);
    • expansion du chemin: oui ( cd /e/x1cd /etc/X11/);
    • script: bien.
  • Fish+ oh-my-fish(courant) est le meilleur de la boîte:
    • complétion automatique: options natives et prises en charge;
    • expansion du chemin: oui;
    • script: trop de différence par rapport à POSIX-compatible.

Utilisez des alias significatifs

Chaque shell peut être développé à l'aide de, functionet aliasvoici ceux que j'utilise en rapport avec votre problème (compatible POSIX):

back () {  # go to previous visited directory
        cd - || exit
}

up () {  # go to parent directory
        cd ..|| exit
}

Il existe des bases, mais vraiment significatif si facile à retenir et autocomplete.

Connais ta coquille

Configurer CDPATHpour ajouter vos répertoires les plus utilisés (par exemple ~/projects/, /etc/init.d/) afin que vous puissiez passer rapidement à eux.

Voir manatwork answer pour plus de détails surCDPATH .

Hangout et lire

Édouard Lopez
la source
Lorsqu'une fonction shell appelle exit, vous quittez le shell interactif. Ces "alias significatifs" pourraient simplement être alias back='cd -'et alias up='cd ..'- mais ne vous inquiétez pas, ces commandes ne renverront jamais de faux (aucun répertoire précédent? Il vous renvoie à la maison! Déjà à la racine? C'est un no-op!) Et par conséquent vous ne quitterez jamais . Pensez également alias back='cd $OLDPWD'(notez les guillemets simples) car il n’aura aucune sortie ( cd -vous indique où il vous envoie, ce qui est probablement inutile, car votre invite contient cette information)
Adam Katz
1

ancest un outil de ligne de commande (terme abrégé pour ancre), qui conserve les signets des répertoires. (jusqu'ici testé uniquement avec bash)

Dans ton cas:

anc a /Project/Warnest/docs/ ~/Dropbox/Projects/ds/test/

cela ajoute les deux répertoires à la liste d'ancrage (pensez aux signets)

Maintenant, si vous voulez aller /Project/Warnest/docs/de n'importe où sur votre type de système:

anc Warn

et si vous voulez sauter à ~/Dropbox/Projects/ds/test/taper:

anc ds test

En plus de faire correspondre le texte avec les chemins des signets, anc dispose de nombreuses autres méthodes pratiques pour parcourir les répertoires.

anc i

démarre le mode interactif, qui répertorie tous les signets par numéro, il vous suffit donc de taper le numéro

Si vous tapez:

anc Pro[TAB]

une liste correspondant à tous les signets (dans votre cas, les deux signets) est affichée et vous pouvez la sélectionner à l’aide des touches de direction, ceci est un moyen très rapide et intuitif.

Obtenez anc sur la page github du projet: https://github.com/tobimensch/anc

Il y a aussi un fichier README avec un exemple d'utilisation.

Divulgation complète: je suis l'auteur de ce script. J'espère que certaines personnes le trouveront utile.

tobimensch
la source