2015-11-12 174 views
1

我想在Bash脚本中执行Zsh函数命令。下面是一个例子:如何在Bash脚本中执行Zsh shell命令

〜/ .zshrc

hello() { 
    echo "Hello!" 
} 

hello.sh

#!/bin/bash 
hello 

在上面的zsh bash脚本执行

(zsh) $ ./hello.sh 
hello command not found 

我也试图与here文档:

#!/bin/bash 
/bin/zsh - <<'EOF' 
    hello 
EOF 

用heredocs执行上面的脚本也说命令未找到错误。

有什么建议吗?

谢谢!

+0

防守运行命令在你的bash脚本中的函数。调用脚本中'.zshrc'中定义的函数有什么意义?你永远不应该这样做(即使在Zsh脚本中,除非你有合理的理由)。而且,如果你足够深入,bash和zsh并不完全兼容。 – 4ae1e1

+0

一个有效的例子是virtualenwrapper的workon命令。即使你在bash中定义了相同的函数或源代码,当前的zsh shell也不会被给定的虚拟环境所反映。 – abhiomkar

+2

如果你需要当前的shell环境,你可以使用一个函数(而不是脚本;当然这个函数可以保存在一个文件中并且来源)或者传递环境变量(或者作为命令行参数)。在非交互式脚本中采购交互式init文件在任何情况下都是不好的做法,更不用说shell不兼容问题了。 – 4ae1e1

回答

4

您可以使用它像:

#!/bin/bash 

/bin/zsh -i -c hello 

-i:强制外壳是互动

然后,如果shell是交互式的,命令是从/etc/zshrc读取,然后$ZDOTDIR/.zshrc(这通常是你的$HOME/.zshrc

-c:在此壳