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

时间:2009-09-30 20:33:50

标签: bash function shell

在我的.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!"
}

6 个答案:

答案 0 :(得分:67)

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

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

export -f hello

然后该函数将在shell提示符下以及从那里调用的其他脚本中可用。

请注意,除非它们将用于子进程(上一句中的“也”),否则不必导出函数。通常情况下,即使这样,最好将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

因为双括号提供的功能比单个括号更多。

答案 1 :(得分:26)

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

function coolness() {

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

答案 2 :(得分:16)

在您的脚本中加入

source .bashrc

尝试使用构造它应该可以工作!

答案 3 :(得分:10)

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

[user@linuxPc]$ . ~/.bashrc

答案 4 :(得分:4)

$ source .bashrc

答案 5 :(得分:-1)

这很奇怪;我的fuctin直到我将其传递给另一个bash实例时才会终止,例如:

bash myfunction