我的第一个bash shell函数不起作用

时间:2013-07-31 10:22:55

标签: bash

我尝试了3个互联网示例来编写一个bashe shell函数,并通过我的xterm终端调用它没有成功。

1 - 我的函数保存在文件“example”中,此文件是不可执行的模式。

2 - 在我写的这个示例文件中:

 #!/bin/bash 
           function quit {
               exit
           }
           function hello {
               echo Hello!
           }

3-在xterm终端中,在该文件所在的文件夹中,我以这些方式调用了这两个函数:

$./quit     $./hello    

以这种方式:

$quit     $hello

它们都不起作用。但是如果我将以下函数更改为脚本(没有函数字)并调用FILE,它就可以工作。

任何想法,发生了什么?

由于

4 个答案:

答案 0 :(得分:3)

您需要获取脚本来将函数定义加载到当前的shell环境中:

# source script
. example

# call function
hello

# call function
quit

答案 1 :(得分:1)

一旦编写了这些函数,它们只能在脚本文件本身中看到。要让它们在外部可见,您需要告诉脚本将函数导出到环境中。

尝试在功能定义后添加export -f quitexport -f hello

让我们清楚地与./$运营商混淆。

当您要在当前目录中调用脚本时,将使用第一个运算符./。例如,如果您已在某个文件script.sh中定义了脚本,则可以使用./script.sh调用它(确保您具有执行权限 - 您可以使用chmod +x script.sh添加它们)。

第二个运算符$用于查看环境变量。这些是在bash shell中默认定义的变量,或者已定义并导出到shell的变量。尝试在shell中输入以下内容。

pi=3.14
echo $pi
3.14

此处,$前缀允许您访问您创建的变量。

答案 2 :(得分:1)

您需要将函数定义提供给外部shell。为此,您需要获取示例文件:

. example
quit
hello

您也可以source example

答案 3 :(得分:0)

./ quit或./hello表示您有名为quit和hello的文件,并且您想要执行它们。 和$ quit和$ hello意味着quit和hello是预定义的命令($ PATH文件夹中的可执行文件,例如/ usr / bin) 当您在shell文件中定义一个函数时,您也应该在该文件中使用它!