假设我有这个bash脚本(测试):
#!/usr/bin/env bash
source ~/.zshrc
在我的.zshrc中,我有以下内容:
autoload -U compinit
compinit
当我尝试从终端窗口(zsh)运行'bash test'时,我收到错误,说找不到autoload和compinit命令。如果我只是从命令行执行source~ / .zshrc,它可以正常工作。
我正在尝试设置我的开发环境,类似于此blog,但是当脚本尝试并获取.zshrc文件时,它会失败。
任何见解都将受到赞赏。
答案 0 :(得分:7)
在您的脚本中,您使用bash
来运行zsh
脚本。您也可以请求python
解释器解析perl
。
在shebang行中将bash
更改为zsh
或使用bash
命令编写脚本。
答案 1 :(得分:2)
它不像python和perl那么糟糕。 bash和zsh都派生自Bourne shell(其行为由POSIX标准化),因此任何用于/bin/sh
的脚本都可能适用于bash或zsh。
通常,您的~/.zshrc
(顾名思义)旨在与zsh一起使用,并且通常包含特定于zsh的命令,如autoload
和compinit
。
你可以使这些命令成为条件,例如:
if [ "$ZSH_VERSION" ] ; then
autoload -U compinit
compinit
fi
但当然这意味着你不会获得这些命令的功能,除非你能想出一种在bash中模拟它们的方法。 (我对这两个命令都不熟悉,所以我无法帮助你。)
(请注意,如果您在bash shell中完成set -u
或set -o nounset
,则会失败。)
但是如果你要同时使用zsh和bash,那么拥有单独的~/.bashrc
和~/.zshrc
文件可能会更有意义,并且每个文件只使用一个shell,它的设计。如果您想避免重复,每个人都可以获取包含常用命令的第三个文件。
(根据评论,你可能一开始就做错了。)