How do you call a function defined in .bashrc from

2019-03-09 06:14发布

In my .bashrc, I have a function called hello:

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

I want to be able to invoke hello() from the shell as follows:

$ hello Lloyd

And get the output:

> Hello, Lloyd!

What's the trick?

(The real function I have in mind is more complicated, of course.)

EDIT: This is REALLY caused by a syntax error in the function, I think! :(

function coolness() {

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

5条回答
啃猪蹄的小仙女
2楼-- · 2019-03-09 07:00

The test in your function won't work - you should not have brackets around the -z clauses, and there should be a space between if and the open bracket. It should read:

function coolness() {

    if [ -z "$1" -o -z "$2" ]; then
        echo "Usage: $0 [sub_package] [endpoint]";
        exit 1;
    fi
    echo "Hi!"
}
查看更多
霸刀☆藐视天下
3楼-- · 2019-03-09 07:05
$ source .bashrc
查看更多
Lonely孤独者°
4楼-- · 2019-03-09 07:08

Any changes made to .bashrc will only take effect in a new terminal session. If you want to apply the changes to your current terminal session, you have to instruct the shell to re-read the .bashrc. The shortest way to to this is to use the . command, which is a synonym to source:

[user@linuxPc]$ . ~/.bashrc
查看更多
太酷不给撩
5楼-- · 2019-03-09 07:16

Include in your script the line

source .bashrc

try with the source construct it should work!

查看更多
The star\"
6楼-- · 2019-03-09 07:17

You can export functions. In your ~/.bashrc file after you define the function, add export -f functionname.

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

export -f hello

Then the function will be available at the shell prompt and also in other scripts that you call from there.

Edit:

Brackets in Bash conditional statements are not brackets, they're commands. They have to have spaces around them. If you want to group conditions, use parentheses. Here's your function:

function coolness() {

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

A better way to write that conditional is:

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

because the double brackets provide more capability than the single ones.

查看更多
登录 后发表回答