Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/ant/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Bash 在不同的shell中执行函数_Bash_Shell_Zsh - Fatal编程技术网

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
实例来运行它?