cd dans un répertoire en tapant son nom?

20

Par exemple, si un répertoire «blob» existe et que je tape simplement «blob [retour]», le système cdest dans le répertoire blob pour moi.

Sous Linux (Ubuntu), je peux ajouter shopt -s autocdà mon .bashrcfichier, mais sous OS X cela donne une erreur:-bash: shopt: autocd: invalid shell option name

Michael Durrant
la source

Réponses:

25

autocda été ajouté dans bash 4.0. Vous pouvez installer une version plus récente de bash avec Homebrew, puis modifier le shell de connexion par défaut avec chsh:

brew install bash;echo /usr/local/bin/bash|sudo tee -a /etc/shells;chsh -s /usr/local/bin/bash

Après avoir ouvert un nouveau shell de connexion (ou un onglet par défaut dans Terminal ou iTerm 2), echo $BASH_VERSIONdevrait imprimer quelque chose comme 4.2.45(2)-release.

Terminal et iTerm 2 ouvrent de nouveaux shells en tant que shells de connexion par défaut, donc bash lit ~/.bash_profilemais pas ~/.bashrc. Si vous ne le faites pas la source ~/.bashrcde ~/.bash_profileou quoi que ce soit, ajouter shopt -s autocdà la ~/.bash_profileplace de ~/.bashrc.

Lri
la source
1
Très bonne réponse. Bash 4 est également disponible dans MacPorts: le remplacement de sudo port install bashvotre étape 1 fonctionne également.
ephsmith
J'ai fait ce qui précède. Je me suis retrouvé avec bash 4.2.29 et j'ai apporté les modifications à / etc / shells et j'ai fait le cssh mais pas de joie
Michael Durrant
@MichaelDurrant J'ai édité la réponse. bash -versionserait la première version de $ PATH. As-tu essayé echo $BASH_VERSION?
Lri
cela fonctionne si j'exécute la commande directement / usr / local / bin / bash - j'obtiens la v4.2 mais comment en faire mon shell par défaut pour une nouvelle fenêtre?
Michael Durrant
1
@MichaelDurrant Votre application de terminal est-elle prête à s'ouvrir avec quelque chose comme /usr/bin/loginou login -fp $USERdans les préférences?
Lri
2

La sortie de shopt -ppeut être utile ici. Il imprime une liste d'options réglables. Malheureusement, sur Lion, il n'enautocd fait pas partie (voir extrait ci-dessous).

Modifier la réponse de Lauri ci-dessus a une solution pour mettre à jour votre shell pour inclureautocd

$ shopt -p
shopt -u cdable_vars
shopt -u cdspell
shopt -u checkhash
shopt -s checkwinsize
shopt -s cmdhist
shopt -u compat31
shopt -u dotglob
shopt -u execfail
shopt -s expand_aliases
shopt -u extdebug
shopt -u extglob
shopt -s extquote
shopt -u failglob
shopt -s force_fignore
shopt -u gnu_errfmt
shopt -u histappend
shopt -u histreedit
shopt -u histverify
shopt -s hostcomplete
shopt -u huponexit
shopt -s interactive_comments
shopt -u lithist
shopt -s login_shell
shopt -u mailwarn
shopt -u no_empty_cmd_completion
shopt -u nocaseglob
shopt -u nocasematch
shopt -u nullglob
shopt -s progcomp
shopt -s promptvars
shopt -u restricted_shell
shopt -u shift_verbose
shopt -s sourcepath
shopt -u xpg_echo
ephsmith
la source