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