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

les*_*es2 55 bash shell function

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

function hello() {
   echo "Hello, $1!"
}
Run Code Online (Sandbox Code Playgroud)

我希望能够从shell调用hello(),如下所示:

$ hello Lloyd
Run Code Online (Sandbox Code Playgroud)

得到输出:

> Hello, Lloyd!
Run Code Online (Sandbox Code Playgroud)

有什么诀窍?

(当然,我想到的真正功能更复杂.)

编辑:这真的是由函数中的语法错误引起的,我想!:(

function coolness() {

    if[ [-z "$1"] -o [-z "$2"] ]; then
        echo "Usage: $0 [sub_package] [endpoint]";
        exit 1;
    fi
        echo "Hi!"
}
Run Code Online (Sandbox Code Playgroud)

Pau*_*ce. 72

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

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

export -f hello
Run Code Online (Sandbox Code Playgroud)

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

编辑:

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

function coolness() {

    if [ -z "$1" -o -z "$2" ]; then
        echo "Usage: $0 [sub_package] [endpoint]";
        exit 1;
    fi
        echo "Hi!"
}
Run Code Online (Sandbox Code Playgroud)

编写该条件的更好方法是:

    if [[ -z "$1" || -z "$2" ]]; then
Run Code Online (Sandbox Code Playgroud)

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


Cas*_*bel 27

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

function coolness() {

    if [ -z "$1" -o -z "$2" ]; then
        echo "Usage: $0 [sub_package] [endpoint]";
        exit 1;
    fi
    echo "Hi!"
}
Run Code Online (Sandbox Code Playgroud)


Lop*_*poc 17

在您的脚本中包含该行

source .bashrc
Run Code Online (Sandbox Code Playgroud)

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

  • 这是不会表现的if语句!(我是java的野兽,但是bash打败我了) (3认同)

mih*_*hai 11

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

[user@linuxPc]$ . ~/.bashrc
Run Code Online (Sandbox Code Playgroud)