1

假设我有这个 bash 脚本(测试):

#!/usr/bin/env bash
source ~/.zshrc

在我的 .zshrc 中,我有以下内容:

autoload -U compinit
compinit

当我尝试从终端窗口 (zsh) 运行“bash test”时,我收到错误消息,提示找不到 autoload 和 compinit 命令。如果我只是从命令行执行 source ~/.zshrc ,它可以正常工作。

我正在尝试设置我的开发环境,类似于此博客,但是当脚本尝试获取 .zshrc 文件时,它会失败。

任何见解将不胜感激。

4

2 回答 2

8

在您的脚本中,您bash用于运行zsh脚本。你不妨让python解释器解析perl.

在 shebang 行中更改bash为或使用命令zsh编写脚本。bash

于 2012-01-15T17:14:36.337 回答
2

它并不像 python vs. perl 那么糟糕。bash 和 zsh 都源自 Bourne shell(其行为由 POSIX 标准化),因此任何设计用于使用的脚本/bin/sh都可能与 bash 或 zsh 一起使用。

~/.zshrc顾名思义,通常你的 .zsh 被设计为与 zsh 一起使用,并且通常包括 zsh 特定的命令,如autoloadcompinit

可以使这些命令有条件,例如:

if [ "$ZSH_VERSION" ] ; then
    autoload -U compinit
    compinit
fi

但这当然意味着您将无法获得这些命令的功能,除非您能找到一种在 bash 中模拟它们的方法。(我对这两个命令都不熟悉,所以我无法帮助你。)

(请注意,如果您已经完成set -uset -o nounset在您的 bash shell 中,这将失败。)

~/.bashrc但是,如果您要同时使用 zsh 和 bash,那么拥有单独的和文件可能更有意义~/.zshrc,并且仅将每个文件与为其设计的 shell 一起使用。如果您想避免重复,每个人都可以获取包含常用命令的第三个文件。

(根据评论,你很可能一开始就做错了。)

于 2012-01-15T22:21:51.410 回答