如何使用 oh-my-zsh 在 zsh 中禁用“自动 cd”

Gab*_*aru 43 shell zsh oh-my-zsh

谷歌搜索这个没有显示任何结果。这就是我的意思:x我的路径中有一个二进制文件(不是当前文件夹,但它在 中PATH),还有一个在当前工作目录中具有相同名称的文件夹。如果我输入x,我希望二进制文件被执行,而是将它 cd 放入该文件夹中。我该如何解决?

ech*_*hox 65

这是三个问题合二为一;-)

AUTO_CD 选项以及如何找到它

首先,您正在寻找的选项是 AUTO_CD。您可以通过查找轻松找到它man zshoptions。使用您的寻呼机搜索功能,通常您按下/并输入关键字。随着n你跳到下一个事件。这将带来以下内容:

[..]
   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.
[..]
Run Code Online (Sandbox Code Playgroud)

可以使用 取消设置该选项unsetopt AUTO_CD

正确关闭

您正在使用 oh-my-zsh,其描述为

“用于管理 zsh 配置的社区驱动框架”包括 120 多个可选插件(rails、git、OSX、hub、capistrano、brew、ant、macports 等),...

所以接下来要做的是找出如何根据框架启用/禁用选项。

readme.textile文件指出的首选方法来启用/禁用插件会在你的.zshrc中的条目:plugins=(git osx ruby) 找出哪些插件使用AUTO_CD选项。正如从联机帮助页中发现的那样,它可以通过 -J 开关或 AUTO_CD 调用。由于 oh-my-zsh 在 github 上可用,搜索它会打开文件lib/theme-and-appearance.zsh. 如果您不想禁用整个插件“主题和外观”,请unsetopt AUTO_CD在您的 .zshrc 中放入一个。不要直接修改 oh-my-zsh 的文件,因为如果您更新框架,您的更改将丢失。

为什么不直接调用可执行文件

您的第三个问题是如何直接执行二进制文件:您必须通过路径执行二进制文件,例如以./in为前缀./do-something。这是某种安全功能,不应更改。插入 USB 记忆棒,安装它并使用ls. 如果有一个可执行文件ls会删除您的主目录,那么一切都会消失,因为这会覆盖 $PATH 的顺序。

如果您有重复调用的命令,在 .zshrc 中设置别名将是一个常见的解决方案。

  • 非常感谢!我需要的是 `unsetopt auto_cd` 行(不过,我确实明确提到了我的路径中的可执行文件 _is_;不过,该解释可能会帮助其他用户弄清楚)。 (4认同)
  • 你的最后一段没有意义。OP 正在询问他们希望优先于 autocd 的“PATH”环境变量中的二进制文件。它与 shell 脚本无法在不指定 `./` 或 `/` 的情况下从路径运行可执行文件无关。 (2认同)

小智 17

这对我有用:

unsetopt autocd
Run Code Online (Sandbox Code Playgroud)

  • 这应该是公认的答案。不包括废话。 (5认同)