Googling this didn't show up any results. Here's what I mean: I have a binary file named x in my path (not the current folder, but it is in the PATH), and also a folder with the same name in the current working directory. If I type x, I want the binary to execute, but instead it cd's into that folder. How do I fix this?


Thats three questions in one ;-)

AUTO_CD Option and howto find it

First of all the option you are looking for is AUTO_CD. You can easily find it by looking up man zshoptions. Use your pagers search function, usually you press / and enter the keyword. With n you jump to the next occurrence. This will bring up the following:

   Changing Directories
       AUTO_CD (-J)
              If  a  command is issued that can't be executed as a normal command, and the command is the name of a directory, perform the cd command to that directory.

The option can be unset using unsetopt AUTO_CD.

Turning it properly off

You are using oh-my-zsh which is described as

"A community-driven framework for managing your zsh configuration" Includes 120+ optional plugins (rails, git, OSX, hub, capistrano, brew, ant, macports, etc), ...

So the next thing is to find out, how to enable/disable options according to the framework.

The readme.textile file states that the prefered way to enable/disable plugins would be an entry in your .zshrc: plugins=(git osx ruby) Find out which plugin uses the AUTO_CD option. As discovered from the manpage it can be invoked via the -J switch or AUTO_CD. Since oh-my-zsh is available on github, searching for it will turn up the file lib/theme-and-appearance.zsh. If you don't want to disable the whole plugin "theme-and-appearance", put a unsetopt AUTO_CD in your .zshrc. Don't modify the files of oh-my-zsh directly, because in case you are updating the framework, your changes will be lost.

Why executables are not invoked directly

Your third question is howto execute a binary directly: You have to execute your binary file via a path, for example with a prefixed ./ as in ./do-something. This is some kind of a security feature and should not be changed. hing of plugging in an USB stick, mounting it and having a look on it with ls. If there is a executable called ls which deletes your home directory, everything would be gone, since this would have overwritten the order of your $PATH.

If you have commands you call repeatedly, setting up an alias in your .zshrc would be a common solution.

  • 5
    Thank you very much! What I needed was the unsetopt auto_cd line (I did explicitly mention that the executable is in my path though; nevertheless, the explanation might help other users figure things out). Apr 27 '14 at 10:06
  • Thank you for the thorough answer and providing details on how you found the information (thus helping others find information like this on their own in the future). Sep 8 '16 at 3:30
  • 3
    Your last paragraph makes no sense. The OP is asking about a binary in their PATH environment variable which they want to take precedence over autocd. It has nothing to do with shell script's inability to run an executable from a path without specifying either ./ or /. Oct 12 '16 at 22:48
  • The first link to the readme does not work. Here it is. Furthermore, the OMZ lib directory has nothing todo with plugins.Regarding the question and as you said, the correct command is unsetopt.
    – Timo
    Oct 23 '17 at 8:14

This worked for me:

unsetopt autocd
  • 6
    This should be the accepted answer. No bullshit included.
    – Aries VII
    May 25 '20 at 11:21

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.