Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/15.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
如何在fish中使用bash函数_Bash_Fish - Fatal编程技术网

如何在fish中使用bash函数

如何在fish中使用bash函数,bash,fish,Bash,Fish,我有几个bash函数,比如 #!/bin/sh git-ci() { ... } 当我不使用fish时,我在~/.bash\u配置文件中有一个源代码~/.my\u函数行,但现在它不工作了 我可以将bash函数用于fish吗?或者,唯一的方法是将它们转换为fish函数,然后通过funcsave xxx保存?在fish中定义函数的语法与POSIX shell和bash非常不同 POSIX函数: hi () { echo hello } 翻译为: function hi

我有几个bash函数,比如

#!/bin/sh

git-ci() {
    ...
}
当我不使用fish时,我在~/.bash\u配置文件中有一个源代码~/.my\u函数行,但现在它不工作了


我可以将bash函数用于fish吗?或者,唯一的方法是将它们转换为fish函数,然后通过funcsave xxx保存?

在fish中定义函数的语法与POSIX shell和bash非常不同

POSIX函数:

hi () { 
    echo hello
}
翻译为:

function hi
    echo hello
end
脚本语法还有其他不同之处。有关示例,请参见中标题为“块”的部分


因此,基本上不可能在fish中使用为bash编写的函数,它们与bash和csh一样不同。您必须检查所有函数并将其转换为fish语法。

在fish中定义函数的语法与POSIX shell和bash非常不同

POSIX函数:

hi () { 
    echo hello
}
翻译为:

function hi
    echo hello
end
脚本语法还有其他不同之处。有关示例,请参见中标题为“块”的部分


因此,基本上不可能在fish中使用为bash编写的函数,它们与bash和csh一样不同。您必须检查所有函数,并将它们转换为fish语法。

正如@Barmer所说,fish不关心兼容性,因为它的目标之一是

理智的脚本

fish是完全可编写脚本的,其语法简单、清晰且一致。你再也不会给以撒写信了

鱼人们认为bash是疯狂的,我个人同意

您可以做的一件事是将bash函数放在单独的文件中,并从fish中将它们作为函数调用

例如:

以前

#!/bin/bash

git-ci() {
    ...
}

some_other_function() {
    ...
}
之后

然后将脚本文件放在路径中的某个位置。现在你可以从fish中调用它们


希望这能有所帮助。

正如@Barmer所说,fish并不关心兼容性,因为它的目标之一是

理智的脚本

fish是完全可编写脚本的,其语法简单、清晰且一致。你再也不会给以撒写信了

鱼人们认为bash是疯狂的,我个人同意

您可以做的一件事是将bash函数放在单独的文件中,并从fish中将它们作为函数调用

例如:

以前

#!/bin/bash

git-ci() {
    ...
}

some_other_function() {
    ...
}
之后

然后将脚本文件放在路径中的某个位置。现在你可以从fish中调用它们


希望这会有所帮助。

如果您不想更改所有语法,一种解决方法是创建一个运行bash脚本并直接传递参数的fish函数

范例

如果你有这样一个函数

早希{ 回声你好,1美元! } 您只需通过剥离函数部分对其进行更改,并将其保存为可执行脚本

回声你好,1美元! 然后创建一个fish函数,该函数调用名为sayhi.fish的脚本

函数sayhi 运行bash脚本并传递所有参数 /bin/bash-absolute/path/to/bash/script$argv 终止 瞧,就像你平时那样运行它

> sayhi ivkremer
Hello, ivkremer!

如果不想更改所有语法,一种解决方法是简单地创建一个fish函数,该函数运行bash脚本并直接传递参数

范例

如果你有这样一个函数

早希{ 回声你好,1美元! } 您只需通过剥离函数部分对其进行更改,并将其保存为可执行脚本

回声你好,1美元! 然后创建一个fish函数,该函数调用名为sayhi.fish的脚本

函数sayhi 运行bash脚本并传递所有参数 /bin/bash-absolute/path/to/bash/script$argv 终止 瞧,就像你平时那样运行它

> sayhi ivkremer
Hello, ivkremer!

/bin/sh通常不是bash。@Cyrus当你源文件时,shebang行被忽略,你必须翻译它们。/bin/sh通常不是bash。@Cyrus当你源文件时,shebang行被忽略,你必须翻译它们。我知道语法的不同。这很可悲。兼容性不是fish的目标。这不会让我更高兴,但我认为重写我的函数并不难。你有两个选择:切换到fish并重写函数,或者继续使用bash。zsh和bash都符合POSIX,但fish不是。设计师们似乎做了一个很糟糕的决定。我知道语法是如何不同的。这很可悲。兼容性不是fish的目标。这不会让我更高兴,但我认为重写我的函数并不难。你有两个选择:切换到fish并重写函数,或者继续使用bash。zsh和bash都符合POSIX,但fish不是。看来设计师们的决定很糟糕。