在~/bin
我有一个名为foo
的shell脚本,在这个脚本中,我有以下内容,只有以下内容:
#!/bin/bash
func(){
echo this is func
}
现在每当我登录时,如果我调用foo
,我希望运行整个shell脚本。也就是说,在命令行上键入foo
之后,就会出现一个名为func
的shell函数,只需回显“this is func”。然而,这种情况并非如此。即使我致电foo
,func
仍然不存在。
如何使该功能存在?实际上,我可以在~/.bashrc
中创建一个别名,但我们假设我们只限于bin中的shell脚本。
编辑:foo
标记为可执行文件。我可以毫无问题地打电话给foo;也就是说,如果我输入foo
,那么我没有收到标准错误,所以我知道foo
已经实现了。但是,func
中的foo
函数似乎不是。
答案 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
}