执行定义与现有命令同名函数的Bash脚本时崩溃如何解决?
问题原因
你定义的nvvp函数和系统原生的nvvp命令同名,函数内部调用nvvp的时候,bash会优先匹配当前作用域的同名函数,而不是去PATH路径中查找原生的二进制程序,这就触发了无限递归调用,会不断创建子进程消耗系统资源,最终导致终端崩溃。
解决方案
方案1:函数内使用command前缀规避递归
修改你的函数定义如下:
nvvp() { command nvvp -vm /usr/lib64/jvm/jre-1.8.0/bin/java }
command是bash内置指令,作用是强制调用PATH路径下的对应二进制程序,忽略当前环境下的同名函数、别名,从根源避免递归问题。
方案2:定义别名替代同名函数
如果不需要额外的逻辑判断,直接用别名实现更简洁,也不会触发递归:
alias nvvp='nvvp -vm /usr/lib64/jvm/jre-1.8.0/bin/java'
持久化生效
将上述任意一种修改写入用户目录下的~/.bashrc文件(如果使用zsh则写入~/.zshrc),之后执行source ~/.bashrc即可永久生效,不需要每次启动终端重新定义。
内容的提问来源于stack exchange,提问作者chrisdottel
相关产品推荐
相关产品推荐

