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

标签 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!"
}

最佳答案

您可以导出函数。在定义函数后的 ~/.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

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

关于bash - 如何从 shell 调用 .bashrc 中定义的函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1500499/

相关文章:

linux - 不使用 "crontab -e"命令编辑crontab文件有什么风险?

linux - 在 Linux 中操作文本文件

linux - 如何在 Bash 中终止 TCP 端口 16969?

python - 带有 UnboundLocalError 的本地和全局引用

linux - WGET 后运行 bash 脚本会忽略读取用户输入

bash - grep 查找具有特定名称的目录中所有文件中的字符串

r - 如何为R中的函数内的函数提供动态数量的参数?

javascript - if 条件子句中的函数

perl - 如果磁盘空间不足,如何在不存在截断文件的危险的情况下从 shell 脚本重写文件?

bash - 将值从子 shell 脚本返回到父脚本