我有一个简单的脚本来检查 rbenv
是否是一个函数,当我输入:
$ 类型 rbenv | grep “rbenv 是一个函数”
进入 shell,我得到肯定的结果,shell 响应是 rbenv is a function
然后我想在脚本中执行此操作,所以我在文件中写入:
#!/bin/bash
if type rbenv | grep -q "rbenv is a function" ;
then
echo "success!"
else
echo "something went wrong."
fi
我不能让它为我工作,这个脚本的结果是出了点问题。
我想让它正常工作,也许知道是否有更好的解决方案来做到这一点任务。
我也试过这个版本的脚本但没有成功。
if [[ $(type rbenv | head -1) == "rbenv is a function" ]] ;
...
编写类型rbenv | shell 中的 head -1
给出输出 rbenv is a function
。我不知道我做错了什么,请指出我的错误。
此问题的部分解决方案是在运行脚本之前在您的 shell export -f rbenv
中运行,但这不是正确的方法吗?
完整解决方案 显然,我需要的是从安装 rbenv 开始重复我的步骤,因为它放在 if 语句之前:
export PATH="$HOME/.rbenv/bin:$PATH"
eval "$(rbenv init -)"
我要感谢所有参与讨论的人,他们指导我完成了解决方案:)
最佳答案
我的直觉是你还没有导出你的函数。尝试
export -f rbenv
在运行脚本之前。这将使该函数对子 shell 可见,例如在运行 shell 脚本时启动的子 shell。
根据您要实现的目标,更好的解决方案可能是将您的代码定义为 .bashrc
或类似文件中的函数,而不是单独的脚本。
此外,您的代码可以变得更加健壮。消息的输出格式可能会在下一次 Bash 升级时发生变化,或者您最终可能会在某天使用本地化为另一种语言的 Bash。
case $(type -t rbenv) in
function) echo Success;;
*) echo Something went wrong;;
esac
(从if test
到case
的变化只是个人习惯/传福音,不是关键修改。)
关于bash - 检查函数是否定义,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25430233/