![在脚本文件中使用时函数不起作用..显示错误命令未找到](https://linux22.com/image/500684/%E5%9C%A8%E8%84%9A%E6%9C%AC%E6%96%87%E4%BB%B6%E4%B8%AD%E4%BD%BF%E7%94%A8%E6%97%B6%E5%87%BD%E6%95%B0%E4%B8%8D%E8%B5%B7%E4%BD%9C%E7%94%A8..%E6%98%BE%E7%A4%BA%E9%94%99%E8%AF%AF%E5%91%BD%E4%BB%A4%E6%9C%AA%E6%89%BE%E5%88%B0.png)
我正在使用 rhel 5。我正在学习 shell 脚本。我创建了一个名为
vi /etc/bashrc(这样我即使在注销后也可以使用此功能)
currenttime()
{
echo -e "Current time is `date`";
echo -e "Calendar Of this month is `cal`";
echo -e "Good Bye Mr.$USER ..Have good day";
}
现在,如果我正常使用这个函数,那么就没有问题了。但是当我在脚本文件下使用这个函数并尝试执行该脚本时。现在它显示错误“currenttime
未找到命令”
Vi 我的脚本
currenttime
chmod +x my_script
sh my_script
currenttime command not found.
现在我无法理解当前时间是否以正常方式正常工作,例如
#currenttime
-----工作正常
但是,如果我在文件中使用它,它会显示错误。你能告诉我这背后的逻辑吗?
答案1
您必须加载/etc/bashrc
您的自定义脚本,因为此文件~/.bashrc
仅适用于交互式 shell。
#!/bin/bash
source /etc/bashrc
currenttime
答案2
@多于
你是对的,先生。我还有一些解释。就像
您可以在使用交互式 shell 时(即在 CLI 上工作时)使用您的函数。这是因为 /etc/bashrc 是启动时所有交互式 shell 的来源(当然,如果您的发行版是这样配置的)。
但是您不能在脚本上使用相同的函数。这是因为脚本对您的函数一无所知。/etc/bashrc 仅用于交互式 shell,不用于非交互式 shell(即为脚本执行而生成的子 shell)。
您必须手动 source /etc/bashrc,或者在您的脚本中包含功能代码,或者将功能代码写在另一个脚本中,然后其他脚本才能 source 该功能代码。