如何从 shell 调用.bashrc 中定义的函数?

在我的.bashrc 中,有一个名为 hello 的函数:

function hello() {
echo "Hello, $1!"
}

我希望能够像下面这样从 shell 调用 hello () :

$ hello Lloyd

然后得到输出:

> Hello, Lloyd!

秘诀是什么?

(当然,我心目中的真正功能要复杂得多。)

编辑: 我认为这实际上是由函数中的语法错误引起的! : (

function coolness() {


if[ [-z "$1"] -o [-z "$2"] ]; then
echo "Usage: $0 [sub_package] [endpoint]";
exit 1;
fi
echo "Hi!"
}
117342 次浏览

在你的脚本中包含这一行

source .bashrc

尝试与 来源构造它应该工作!

$ source .bashrc

可以导出函数。在定义函数后,在 ~/.bashrc文件中添加 export -f functionname

function hello() {
echo "Hello, $1!"
}


export -f hello

然后,该函数将在 shell 提示符下可用,并且在您从那里调用的其他脚本中也可用。

注意,没有必要导出函数,除非它们将在子进程中使用(前面句子中的“ also”)。通常,即使是这样,最好将函数 source放入将要使用它的文件中。

编辑 :

Bash 条件语句中的括号不是括号,而是命令。它们周围必须有空间。如果要对条件进行分组,请使用括号。这是你的功能:

function coolness() {


if [ -z "$1" -o -z "$2" ]; then
echo "Usage: $0 [sub_package] [endpoint]";
exit 1;
fi
echo "Hi!"
}

写这个条件句的一个更好的方法是:

    if [[ -z "$1" || -z "$2" ]]; then

因为双括号比单括号提供了更多的能力。

函数中的测试不起作用——-z 子句周围不应该有括号,if 和开括号之间应该有一个空格。内容应该是:

function coolness() {


if [ -z "$1" -o -z "$2" ]; then
echo "Usage: $0 [sub_package] [endpoint]";
exit 1;
fi
echo "Hi!"
}

.bashrc的任何更改只会在新的终端会话中生效。如果要将更改应用于当前终端会话,则必须指示 shell 重新读取 .bashrc。实现这一点的最简单方法是使用 .命令,它是 source的同义词:

[user@linuxPc]$ . ~/.bashrc