从脚本文件调用 Bash 函数失败,而从终端调用成功

Arc*_*ing 2 source shell-script files bash-functions

在使用 Bash 的 Ubuntu 16.04 中,我创建了一个文件$HOME/ulcwe/software_internal.sh,其中包含一个rse()没有调用的函数。该文件源自~/.bashrc(它是由其自身获取的),我可以rse从终端中的任何位置调用,并且它将运行而不会出现错误。

然而,我尝试运行此脚本文件,其中包含对第 36 行的调用rse,但出现此错误:

第 36 行:rse:未找到命令

为什么函数在手动调用(rse在 Bash 中键入并执行)中调用成功,但在 Bash 脚本中调用失败?如何从脚本中成功调用它?

Kus*_*nda 5

您必须确保该函数可用于脚本。您可以通过两种方式执行此操作:

  1. source包含函数定义的文件,或者
  2. export调用脚本之前的函数(export -f rse将导出函数)。

函数与 shell 变量一样,不是脚本继承的环境的一部分。必须导出 Shell 变量,使其成为环境变量,并且bash同样可以导出函数。

导出的函数不能由任何进程调用,只能由其他bash脚本调用。

  • 哦,我想我现在明白了,虽然函数文件源自“bashrc”,但它没有导出,因此不可用于像我运行的脚本文件这样的**子进程**。因此,我应该导出函数文件并放在“bashrc”中,而不仅仅是在那里获取它。 (2认同)