如何让外部程序知道我的 bash 函数

如何让外部程序知道我的 bash 函数

我有 bash 函数foo,并且bar在我的~/.bashrc.

函数foo调用一个外部命令ext_command,该命令本身将另一个命令作为其参数之一。我想bar作为该命令传递,即我希望我的.bashrc看起来像这样:

bar() {
...
}
foo() {
 ext_command --invoke bar
} 

然而,这不起作用,因为外部命令不是 shell 脚本,它不知道bar.我该如何解决这个问题?

我想改为做

ext_command --invoke "bash -c 'bar'"

但此调用中的 Bash 不是作为交互式 shell 运行,因此它也不知道bar

因此,我相信解决我的问题的一种方法是强制 Bash 作为交互式 shell 运行;不幸的是我不知道该怎么做。

我认为肯定有效的另一种方法是使用

ext_command --invoke "bash -c 'source ~/.bashrc; bar'"

但由于某种原因这不起作用并且实际上只是运行

bash -c 'source ~/.bashrc; bar'

在交互式 bash 会话中给出

bash: bar: command not found

无论如何,我不喜欢这个解决方案,因为foo无论它来自哪个文件,我都想工作。

答案1

一般情况下,你有以下几种选择:

  1. 将函数重写为命令,即。一个单独的脚本。常见的做法是保留一个~/bin目录并将其包含在您的$PATH.
  2. 将函数导出到环境并让其他 shell 从那里获取它。看我可以在 bash 中“导出”函数吗?
  3. 坚持bar成为可获取的功能,但从中获取它~/.bashrc可能不是最好的解决方案。您可以将其放入自己的文件中~/bin并从那里获取它。这会让事情变得简单。
  4. 如果可能的话,以其他方式将逻辑提供给函数ext_command中的,例如。foo通过这里的文档。

相关内容