首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >无法使用find、fzf和xargs源文件

无法使用find、fzf和xargs源文件
EN

Unix & Linux用户
提问于 2022-06-15 23:12:58
回答 1查看 355关注 0票数 2

我试图使用fzf来选择和激活不同的虚拟环境。但是,我收到以下错误:xargs: source: No such file or directory

我的命令包括三个部分:find | fzf | xargs (1)查找我的虚拟环境,(2)使用fzf选择一个虚拟环境,(3)使用xargs对所选文件进行source

下面是完整的命令:find ~/.virtualenvs/ -maxdepth 1 -type d | fzf | xargs -I {} source {}/bin/activate xargs: source: No such file or directory

我可以直接源文件(即命令提示符显示进入fzf_delete虚拟环境的条目):brian:~$ source /home/brian/.virtualenvs/fzf_delete/bin/activate (fzf_delete) brian:~$

我可以使用fzf:find ~/.virtualenvs/ -maxdepth 1 -type d | fzf /home/brian/.virtualenvs/fzf_delete选择虚拟环境。

我还通过移除find和fzf:echo "/home/brian/.virtualenvs/fzf_delete" | xargs -I {} source {}/bin/activate xargs: source: No such file or directory上的依赖关系,将问题隔离到xargs。

我尝试过引用、使用变量、字符串连接、命令替换、使用bash -c等各种变体,这些都是徒劳的。How我可以让xargs来源所选的文件吗?

PS -我知道,在文件名包含空格的情况下,应该在find、fzf和xargs中使用空终止,但这似乎不会导致当前的问题。

EN

回答 1

Unix & Linux用户

回答已采纳

发布于 2022-06-15 23:32:11

source是一个内置的shell命令。您将无法使用xargs运行,因为xargs无法对当前的shell进行更改。也就是说,即使您要做一些类似... | xargs -I {} sh -c 'source {}/bin/activate'的事情,也不会有帮助,因为:

  1. 当前的shell生成xargs。
  2. xargs产生了一个新的壳
  3. 新的shell来源于您的文件
  4. 新壳退出
  5. xargs出口

你回到了你开始的地方,没有对你的环境做任何修改。

另一方面,这样做是可行的:

代码语言:javascript
复制
source "$(find ~/.virtualenvs/ -maxdepth 1 -type d -print0 | fzf --read0)"/bin/activate

请注意,由于不能使用xargs的相同原因,您也不能通过shell脚本运行上述命令。也就是说,如果使用该命令创建$HOME/bin/select-venv并使其可执行,它将无法工作,因为它将在子subshell中生成。

但是,您可以在当前shell中创建一个select_venv函数或别名。

票数 5
EN
页面原文内容由Unix & Linux提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://unix.stackexchange.com/questions/706348

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档