取消同名bash函数后无法调用LibreOffice可执行文件的恢复方法及优化方案咨询
取消同名bash函数后无法调用LibreOffice可执行文件的恢复方法及优化方案咨询
嗨,我来帮你梳理下这个问题,这是很常见的bash函数和系统命令冲突的场景~
一、怎么恢复LibreOffice的调用
你现在找不到命令,本质是MacOS默认没把LibreOffice的可执行文件路径加到系统PATH里,之前你的函数相当于“替代”了原生命令的调用,函数删掉后系统自然找不到了。给你几个实用的解决办法:
- 直接用完整路径调用:先找到LibreOffice可执行文件的位置,在终端运行:
一般会输出类似find /Applications/LibreOffice.app -name libreoffice -type f/Applications/LibreOffice.app/Contents/MacOS/libreoffice的路径,直接输入这个路径就能启动原生程序了。 - 把路径加入系统
PATH:如果想以后直接用libreoffice命令调用,把下面这行加到你的~/.bash_profile或者~/.bashrc里(取决于你平时用的shell配置文件):
保存后运行export PATH="/Applications/LibreOffice.app/Contents/MacOS:$PATH"source ~/.bash_profile(对应你修改的配置文件),之后就能直接敲libreoffice调用原生程序了。 - 重新定义更安全的函数:如果还是想用
open -a的方式启动图形界面版,换个不重名的函数名就行,比如:
这样既不影响原生命令调用,又能快速启动图形界面。lo() { open -a LibreOffice "$@"; }
二、更好的移除/避免函数冲突的方案
你用unset -f libreoffice本身是正确的移除函数的命令,问题出在这个函数和系统原生命令重名了,导致函数删除后原生命令因为PATH的问题找不到。所以更好的思路是从源头避免冲突:
- 给函数起独特的名字:比如刚才说的
lo,完全不会和原生命令冲突,也就不用后续删除了。 - 临时使用函数(无需手动unset):如果只是临时需要这个函数,可以在子shell里定义执行,用括号包裹即可:
括号里的代码会在独立的子shell中执行,执行完子shell自动关闭,函数也会跟着消失,不会影响当前shell环境。(libreoffice() { open -a LibreOffice "$@"; }; libreoffice yourfile.docx) - 调用原生命令时绕过函数:如果已经定义了重名函数,又需要临时调用原生命令,可以用
command libreoffice,这个命令会直接忽略shell函数,去查找系统原生的可执行文件。
备注:内容来源于stack exchange,提问作者user3897315
相关产品推荐
相关产品推荐

