我试图使用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中使用空终止,但这似乎不会导致当前的问题。
发布于 2022-06-15 23:32:11
source是一个内置的shell命令。您将无法使用xargs运行,因为xargs无法对当前的shell进行更改。也就是说,即使您要做一些类似... | xargs -I {} sh -c 'source {}/bin/activate'的事情,也不会有帮助,因为:
你回到了你开始的地方,没有对你的环境做任何修改。
另一方面,这样做是可行的:
source "$(find ~/.virtualenvs/ -maxdepth 1 -type d -print0 | fzf --read0)"/bin/activate请注意,由于不能使用xargs的相同原因,您也不能通过shell脚本运行上述命令。也就是说,如果使用该命令创建$HOME/bin/select-venv并使其可执行,它将无法工作,因为它将在子subshell中生成。
但是,您可以在当前shell中创建一个select_venv函数或别名。
https://unix.stackexchange.com/questions/706348
复制相似问题