假设我有以下三个脚本文件:(所有三个都是可执行的)
bash-测试.sh:
#!/bin/bash
HelloFromBash RocketNuts
zsh-测试.sh:
#!/bin/zsh
HelloFromZsh RocketNuts
sh-测试.sh:
#!/bin/sh
HelloFromSh RocketNuts
从shebangs中可以看出,这些脚本分别由不同的shell执行bash
,即zsh
、和sh
。
这三个函数“HelloFromXyz”都应该像这样定义:
function HelloFromBash { echo "Hello $1, this is Bash speaking" }
对于 zsh 和 sh 变体也是如此。
但问题是:我想要全局定义这些函数,每个特定的 shell 一个。
如何或者在哪里为这三个 shell 定义全局函数?这样,当我运行上述三个脚本时,它们各自都可以使用该 shell 的特定全局函数。
如果有一种统一的方法来同时为多个 shell 定义(或导出,或任何适当的术语)全局函数,那就更好了。但我相信事实并非如此,每个 shell 似乎都使用自己的机制。
(编辑) 我理解,无论是交互式 shell 还是登录 shell,可能会有所不同。我希望该函数在 shell 脚本中可用全部情况。因此,我可以手动打开终端,并运行使用所述全局函数的脚本。或者,我可以运行调用相同 shell 脚本的后台进程。
如果这需要在多个文件中定义或导出相同的函数,或者在另一个文件中包含/获取一个函数,我很乐意了解详细信息。
答案1
如果您想定义一个函数“库”以在脚本中使用,请将它们写入在使用该函数的脚本中“源”的文件中:
“库”文件:
function the_function {
# whatever
}
用法:
# include the library
source /path/to/the/library # You can also use ". /path/to/the/library"
# Or, of caller and library are in the same directory
source $(dirname "$0")/library
# Call the function in it
the_function arg1 arg2
该库文件不需要是可执行文件,也不需要 shebang,因此如果编码得当,它可以被 bash 和 ksh(也许还有 zsh)使用。