bash - 检查函数是否定义

标签 bash function shell

我有一个简单的脚本来检查 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 testcase的变化只是个人习惯/传福音,不是关键修改。)

关于bash - 检查函数是否定义,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25430233/

相关文章:

转换 Bash 函数来计算 n!到C?

Perl 模块方法调用 : Can't call method "X" on an undefined value at ${SOMEFILE} line ${SOMELINE}

java - EMV TLV Java 函数

linux - 检查数组元素是否在文件中

macos - 双击时如何在Mac中运行shell脚本?

python - 检查 shell 命令是否已成功执行的最佳方法

linux - shell脚本中的递归问题

bash - Sed 先移动到结束

function - 在 ELF 中查找函数的起始偏移量

linux - Centos shell 脚本 - 对以相同字符串开头的文件进行分组