我尝试了3个互联网示例来编写一个bashe shell函数,并通过我的xterm终端调用它没有成功。
1 - 我的函数保存在文件“example”中,此文件是不可执行的模式。
2 - 在我写的这个示例文件中:
#!/bin/bash
function quit {
exit
}
function hello {
echo Hello!
}
3-在xterm终端中,在该文件所在的文件夹中,我以这些方式调用了这两个函数:
$./quit $./hello
以这种方式:
$quit $hello
它们都不起作用。但是如果我将以下函数更改为脚本(没有函数字)并调用FILE,它就可以工作。
任何想法,发生了什么?
由于
答案 0 :(得分:3)
您需要获取脚本来将函数定义加载到当前的shell环境中:
# source script
. example
# call function
hello
# call function
quit
答案 1 :(得分:1)
一旦编写了这些函数,它们只能在脚本文件本身中看到。要让它们在外部可见,您需要告诉脚本将函数导出到环境中。
尝试在功能定义后添加export -f quit
和export -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文件中定义一个函数时,您也应该在该文件中使用它!