
fd -x 调用 alias 或 shell 函数提示 command not found 怎么解决【免费下载链接】fdA simple, fast and user-friendly alternative to find项目地址: https://gitcode.com/GitHub_Trending/fd/fd在 fd 里用-x/--exec对每个搜索结果并行执行命令、或用-X/--exec-batch把所有结果一次性传给命令时如果模板里写的是当前 shell 里的 alias 或自定义 shell 函数执行结果往往是command not found。这不是 fd 没找到文件而是子进程根本看不见这些东西。fd 官方 README 的 Troubleshooting 一节专门给出了应对方法按你使用的 shell 分三种情况处理。为什么 alias 和 shell 函数在fd -x里不可用fd 的 README 在 Command not found foraliases or shell functions 一节中明确说明Shellaliases and shell functions can not be used for command execution viafd -xorfd -X.也就是说fd 执行的是外部命令。alias 和函数只存在于当前交互式 shell 的内存里并不会进入子进程的环境而 fd 启动的子进程只能依赖 PATH 上的可执行文件和继承到的环境变量。alias 在交互 shell 里输入能生效但换到 fd 启动的子进程里就查不到于是报command not found。解决方法zsh把 alias 设为全局别名zsh 下用alias -g把别名声明为全局global别名alias -g myalias…myalias是你要替换的目标别名名…替换为它展开成的命令文本。fd 文档原文给出的示例就是这种写法文档没有给出具体展开内容请按自己实际的别名填写。bash导出函数并通过bash -c调用bash 下需要两步。先用export -f把函数导出使其对子进程可用export -f my_function然后把命令写成显式的bash -c调用fd -x bash -c my_function $1 bash文档原文Inbash, you can useexport -f my_functionto make available to child processes. You would still need to callfd -x bash -c my_function $1 bash.其中$1用来接收由 fd 填入的文件路径模板里没有写占位符时fd 会自动在末尾补一个{}作为 bash 的位置参数传给函数最后的bash是传给$1的脚本名。my_function替换为你实际要导出的函数名。其他 shell改用临时shell 脚本README 给出的第三种方案一句话带过For other use cases or shells, use a (temporary) shell script.做法是把你原来的函数体或别名展开后的命令写进一个临时脚本文件比如./mycmd.sh确认它位于 PATH 可搜索的位置再把-x模板指向脚本名即可。文档没有给出脚本内容模板脚本本身由你自己按原命令改写。验证结果改完后重新执行同一条fd -x或fd -X命令不再出现command not found每个搜索结果都对应启动一次目标命令-x或所有结果一次传给目标命令-X并且能看到预期输出。fd -x的多线程并行输出不会互相穿插所以如果结果里混着正常输出和报错可以直接定位到报错的那条命令。相关边界README 里 Placeholders in-x/-X 一节提到{}、{/}、{//}、{.}、{/.}这些占位符在某些 shell 中需要在传给 fd 之前加引号否则会被 shell 提前解释。如果你同时修改了引号或占位符验证时留意是否仍是 fd 拿到占位符而不是 shell 提前展开成了空串。如果改完仍报command not found回到 README 的 Command execution 一节核对命令模板的写法——-x之后的位置参数都属于命令模板要额外给 fd 传 pattern 或 path 时应把-x放到最末尾避免参数归属错误。【免费下载链接】fdA simple, fast and user-friendly alternative to find项目地址: https://gitcode.com/GitHub_Trending/fd/fd创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考