如何调用bash函数

six*_*ude 42 bash

也许我正在以错误的方式看待这个..但在这里我正在尝试做。我的大部分工作都是用 Java 完成的,但只是切换到了 unix (bash) 环境。我正在这样做:

[~/Desktop/bashPlay]% cat myFunc
#!/bin/bash

ls2(){
        echo "Hello World"
}

ls3(){
        echo "Testing"
}

echo "this is a test"   
ls2 # this calls a function

[~/Desktop/bashPlay]% myFunc
this is a test
Hello World
Run Code Online (Sandbox Code Playgroud)

但是我的文件中有两个函数,我希望能够从命令行分别调用它们。即:myFunc.ls2()甚至只是ls2. 我知道我可以将这些函数添加到我的.bashrc文件中,但是有没有其他方法可以在不将它们添加到我的文件中的情况下执行这些函数.bashrc

Joh*_*n T 39

执行此操作的一种方法是通过source命令,需要更多的输入。要从 myFunc 调用函数,您可以使用source myFunc; ls2它,它会输出 Hello World。

例如,我有一个名为的文件say.sh

#!/bin/bash

function talk()
{
        echo "hi!"
}
Run Code Online (Sandbox Code Playgroud)

现在我想talk()从命令行调用它的函数:

[john@awesome ~]$ source say.sh; 讲话
你好!

从另一个 bash 脚本调用它:

#!/bin/bash
source say.sh
talk
Run Code Online (Sandbox Code Playgroud)

您还可以将每个放在单独的脚本中,并将它们添加到 PATH 变量中的目录中。

例如,在一个名为的脚本中,hello您将拥有:

#!/bin/bash
echo "Hello World"
Run Code Online (Sandbox Code Playgroud)

现在将它放在 PATH 中的目录之一中,您可以通过运行echo $PATH. 如果您愿意或使用现有目录,您可以将另一个目录添加到您的 PATH 中。将文件复制到那里后,使用chmod +x filename.

  • 需要明确的是:您只需在每个脚本或 shell 启动时获取文件一次。之后您可以根据需要多次调用该函数,而无需再次引用源文件。 (3认同)

Mik*_*zyk 8

如果你和我一样,你不想用函数来弄乱你的环境。您还有一组在功能方面属于同一组的函数,因此将它们放在同一个脚本文件中是有意义的。(我知道包含多个文件的文件夹可以达到相同的目的)。这是一个可能的解决方案,允许您在脚本中调用特定函数:

$ cat functions.sh    
#!/bin/bash

ls2() {
        echo "Hello World"
}

ls3() {
        echo "Testing $*"
}

# the next line calls the function passed as the first parameter to the script.
# the remaining script arguments can be passed to this function.

$1 $2 $3 $4 $5 

$ ./functions.sh ls2    
Hello World   
$ ./functions.sh ls3    
Testing     
$ ./functions.sh ls3 first_arg    
Testing first_arg    
$
Run Code Online (Sandbox Code Playgroud)

  • @ChuckWilbur:为什么要跳圈?只需将最后一行更改为“$@”即可。 PS你的做法实际上是错误的;最后一部分应该是``“$FUNC_CALL”“$@”``(即``$FUNC_CALL``应该用引号引起来)。 (2认同)

Deb*_*ger 6

另一种方法是创建一个名为functions.sh~/bin例如在目录中)的脚本。

在此脚本中,您添加所有个人函数定义(假设每次添加函数时都将其添加到此文件中...)

最后,您只需将该source ~/bin/functions.sh行添加到您的.bashrc文件中。通过这种方式,您将能够从命令行调用它们,您.bashrc将保持干净,并且您将有一个特定的地方用于您的个人功能。