linux - Shell 函数 - 命令调用后不活动

标签 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 已实现。但是,foo 中的函数 func 似乎不是。

最佳答案

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

source ~/bin/foo

. ~/bin/foo

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

. foo

关于linux - Shell 函数 - 命令调用后不活动,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36415145/

相关文章:

linux - system_call_after_swapgs,我的代码大部分时间都花在哪里?

linux - 如何在多个文件中运行多年和 12 个日历月的时间戳?

用于检查内存完整性的 Linux 内核模块

linux - 用于查找 5 个最新 .jar 文件的 shell 脚本,将它们呈现给用户,获取输入并使用 ssh 进行复制

linux - 如何在 Linux 上独立于鼠标版本和类型明确设置鼠标速度/加速度

linux - 过去 X 小时的 Grep

android - 如何在 Linux 机器上为 Android 构建 linux 命令

linux - 为什么 chronyc makestep 不能立即同步时间?

shell - Pentaho执行进程似乎没有启动脚本文件

c# - 从 ASP.NET Core 3 应用程序执行 Linux Shell 命令