Bash 在不同的shell中执行函数
我通常Bash 在不同的shell中执行函数,bash,shell,zsh,Bash,Shell,Zsh,我通常zsh。我想在bash中执行一个函数并返回到我的原始shell。我可以手动完成,但我想自动化它。我该怎么做 例如,我在zsh上。 我想执行func,这是bigscript.sh文件中的function()。我正在我的.zshrc 我试着添加shebang#/bin/bash在bigscript.sh文件中,但这不会更改shell。 我尝试了另一种方法,将函数放入独立的function.sh文件中,并将shebang添加到其中。成功了。但是,我不想将文件拆分为更小的.sh文件 那么,有没有关
zsh
。我想在bash中执行一个函数并返回到我的原始shell。我可以手动完成,但我想自动化它。我该怎么做
例如,我在zsh上。
我想执行func
,这是bigscript.sh
文件中的function()
。我正在我的.zshrc
我试着添加shebang#/bin/bash
在bigscript.sh
文件中,但这不会更改shell。
我尝试了另一种方法,将函数
放入独立的function.sh
文件中,并将shebang添加到其中。成功了。但是,我不想将文件拆分为更小的.sh
文件
那么,有没有关于为单个函数更改shell的建议?如果该函数是用bash编写的,一般来说,您不能从Zsh执行它,因为bash和Zsh是不同的语言。当然,由于有一些相似之处,所以可以在Zsh上编写在bash上工作相同的函数,我不会依赖它。即使此时您的函数恰好是一个“兼容”函数,如果有人稍后修改此函数,他可能不会意识到此函数将在bash上下文之外使用,并以某种方式更改它,使其不会运行,或者更糟糕的是,在Zsh下的行为会有所不同 因此,唯一的方法是编写一个接口bash脚本,它从定义此函数的文件中获取源代码,并执行它-类似于
#!/bin/bash
# Interface script to call bash function foo from other languages
. file-which-defines-function-foo
foo "$@"
事实上,你有一个功能是有点无关;要在另一个shell中执行代码,必须启动该shell的解释器,在该解释器上可以执行任意脚本。在您当前的
zsh
会话中定义函数没有任何区别;函数必须在新shell的会话中定义,然后才能执行。这就是我想要的。当我调用函数时,我希望它更改shell并在新shell上执行自己…为什么不首先在zsh
中编写函数?@chepner它的遗留代码。大多数开发人员都在使用bash,很少有人使用zsh。我明白你的意思。。创建一个包装函数,或者最终将脚本分解为更小的脚本。但我正试图避免这种情况。让我这样说:您有什么函数可以在zsh
中定义,但实际上没有在zsh
中运行,从而需要启动bash
实例来运行它?