使用 zsh 扩展 - 为什么我必须手动输入“zsh”才能使其出现?

使用 zsh 扩展 - 为什么我必须手动输入“zsh”才能使其出现?

我在 OSX 10.5 Leopard 上使用 Robby Russell 的“oh-my-zsh”扩展。但是我发现它默认不加载。当我启动新终端时,它使用“默认”ZSH 提示符,我必须手动输入“zsh”并按回车键才能获得“增强”提示符。我的.zshrc文件列出了指向 oh-my-zsh 目录的 ZSH 路径:

这非常烦人,因为每次我打开新选项卡时,我都必须再次输入 zsh(顺便问一下,是否有可能让新选项卡记住我当前的工作目录?我主要编写 Rails 应用程序,因此我会在同一个目录中打开 2-3 个窗口,每次都必须 cd 回到该目录,这很令人沮丧)。有没有一种简单的方法可以在我打开终端时自动启动 oh-my-zsh,这样我就不必每次都输入 zsh?

编辑

我按照 Robby 在 Github 上的说明自动安装了 oh-my-zsh,因此这是它为我创建的 .zshrc:

# Path to your oh-my-zsh configuration.
export ZSH=$HOME/.oh-my-zsh

# Set to the name theme to load.
# Look in ~/.oh-my-zsh/themes/
export ZSH_THEME="maran"

# Comment this out to disable weekly auto-update checks
# export DISABLE_AUTO_UPDATE="false"

source $ZSH/oh-my-zsh.sh

# Customize to your needs...
export     PATH=/usr/local/bin:/usr/local/sbin:/usr/local/mysql/bin:/usr/bin:/bin:/usr/sbin:/sbin:/usr  /local/bin:/usr/X11/bin:/usr/local/git/bin
export GIT_EDITOR="mate -w"

我尝试更改默认 shell 以指向该 shell,但随后出现错误,提示它已被设置为非法变量。$HOME 变量正确指向我的主目录,但直到我在终端中输入 zsh 并出现常规 zsh 提示符时,它似乎才加载。

编辑

以下是输出pstree -wp $$

-+= 00001 根目录 /sbin/launchd
 \-+= 00066 waynemolina /sbin/launchd
   \-+= 68844 waynemolina /应用程序/实用程序/终端.app/Contents/MacOS/终端-psn_0_704684
     \-+= 68845 root 登录 -pfq waynemolina /bin/zsh
       \-+= 68846 waynemolina-zsh
         \-+= 68939 waynemolina pstree -wp 68846
           \--- 68940 root ps -axwwo 用户

答案1

回到 10.4,终端有一个“当创建新的终端窗口时”的首选项,要么使用命令/usr/bin/login,要么让用户指定命令。我期望终端在 10.5 中也有类似的东西。

您是否碰巧有类似zsh -f指定的命令,而不是使用/usr/bin/login调用时不带-f?-f选项会导致忽略除之外的所有启动文件/etc/zshenv(即它将忽略您的~/.zshrc)。

检查此设置的另一种方法可能是使用defaults read com.apple.Terminal Shell。如果它显示一些输出,则表示您有一个自定义设置。如果它为空白或不存在,则您可能仍在使用默认的/usr/bin/login

编辑后添加:
在具有默认提示符的某个 shell 中(新终端窗口或选项卡),请检查以下内容:

  • set -o | fgrep rcs显示“开”吗norcs
  • [[ "$ZDOTDIR" -ef "$HOME" ]] || echo "ZDOTDIR=$ZDOTDIR"显示什么吗?

如果其中一个或两个条件为真,则需要追踪它们的设置位置。请注意,norcs可能使用set +o rcsset -o norcssetopt norcsunsetopt rcs或中的任何一个进行设置set -f。此外,选项名称不区分大小写,并且可以在任何地方插入下划线(NO_rC___s与 相同)。从您的 ZDOTDIR 目录中norcs查找/etc/zshenv/etc/zprofile/etc/zshrc/etc/zlogin;和.zshenv.zprofile.zshrc和。.zlogin

了解你的“默认提示符”shell 的完整来源可能也很有用(pstree -wp $$如果你有pstree来自(例如)麦金塔zsh -f)。也许正常的“rc”进程被“rc”文件中的某些内容打断了。

答案2

我不太了解 Mac OS X 如何与 shell 配合使用,但总的来说,我发现在初始化文件周围添加一些 echo 语句很有用,以确保它们被引用。因此,在您的 .zshrc 文件中,您可以添加一行echo "Loading .zshrc"。等等。启动新 shell(或打开新选项卡)时这些 echo 语句的存在或不存在应该可以帮助您诊断问题。

至于目录更改问题,有两种可能的解决方案:
1. 使用屏幕,忘记标签。2
. 编写一个函数将当前目录回显到某个文件,然后将该函数放入 precmd 中,然后在 .zshrc 中添加一行以读取该文件并 cd 到该文件。更具体地说(但未经测试!):

PWD_SAVE_FILE="$HOME/.pwd_save"
function savepwd {
  pwd > "$PWD_SAVE_FILE"
}

function precmd {
  savepwd
}

cd "`cat "$PWD_SAVE_FILE"`"

答案3

我遇到了这个问题。这是因为我的主目录中有一个 .zlogin。一旦我删除了 .zlogin,我的 zsh 就可以正常工作了

答案4

尝试将其放入您的~/.zshrc文件中以进行调试:

紧接着这一行:

export ZSH=$HOME/.oh-my-zsh

放:

echo $HOME
echo $ZSH

相关内容