Shell函数 - 命令调用后非活动

时间:2016-04-05 00:30:35

标签: linux shell

~/bin我有一个名为foo的shell脚本,在这个脚本中,我有以下内容,只有以下内容:

#!/bin/bash
func(){
   echo this is func
}

现在每当我登录时,如果我调用foo,我希望运行整个shell脚本。也就是说,在命令行上键入foo之后,就会出现一个名为func的shell函数,只需回显“this is func”。然而,这种情况并非如此。即使我致电foofunc仍然不存在。

如何使该功能存在?实际上,我可以在~/.bashrc中创建一个别名,但我们假设我们只限于bin中的shell脚本。

编辑:foo标记为可执行文件。我可以毫无问题地打电话给foo;也就是说,如果我输入foo,那么我没有收到标准错误,所以我知道foo已经实现了。但是,func中的foo函数似乎不是。

2 个答案:

答案 0 :(得分:2)

如果您将脚本作为命令运行,它将在子进程中运行,并且它对环境所做的任何更改都不会影响原始shell进程。如果您希望它修改原始shell进程,则需要source它。

source ~/bin/foo

. ~/bin/foo

如果您~/bin中有$PATH,则可以将其简化为

. foo

答案 1 :(得分:-1)

你的路径中有~/bin吗? ~/bin/foo标记为可执行文件吗?如果没有,chmod +X ~/bin/foo

编辑:

正确的语法应如下

#!/bin/bash
func() {
  echo This is func
}