首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >fish shell函数不访问用户路径

fish shell函数不访问用户路径
EN

Stack Overflow用户
提问于 2022-10-19 16:30:12
回答 1查看 31关注 0票数 1

我最近开始使用fish,我需要使用一个jar文件,用于谷歌的bundletool。

因此,我需要为bundletool设置一个别名/函数,而且我选择了一个函数,因为它看起来更“可疑”。

我的功能很简单:

代码语言:javascript
复制
function bundletool
    java -jar bundletool-all-1.12.1.jar $argv
end

bundletool本身位于~/.local/bin,它位于我的鱼用户路径上:

代码语言:javascript
复制
lase@laser-razer /m/c/U/matth [1]> echo $fish_user_paths
/home/lase/.local/bin /usr/local/go/bin /home/lase/.nvm /home/lase/.cargo/bin /home/lase/.cargo

在普通的shell中,我可以执行java -jar bundletool-all-1.12.1.jar,并且命令按预期运行。但是,在函数中,fish似乎不知道我的fish_user_paths,并报告它找不到jar文件。

为了纠正这种情况,我必须更新我的函数以指定完整的路径:

代码语言:javascript
复制
function bundletool
    java -jar ~/.local/bin/bundletool-all-1.12.1.jar $argv
end

这很管用,但我觉得我做的不对。我应该以一种不同的方式设置我的路径或功能吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-10-19 19:47:01

您的函数将在普通环境中运行。

它将与当前的$PATH一起运行,更重要的是运行当前的工作目录。

所发生的事情是:

代码语言:javascript
复制
java -jar bundletool-all-1.12.1.jar

将告诉java运行在bundletool-all-1.12.1.jar中找到的jar。

值得注意的是,fish只是将字符串“bundletool 1.12.1.jar”交给java,而java则不会查看$PATH。它不关心$PATH。它只需查看“bundletool all-1.12.1.jar”,并尝试以该名称打开一个文件。

如果该文件位于当前目录中,它将找到该文件。

这也是当你以交互方式执行它的时候,它对你有用的原因--因为你碰巧在那个目录中。

然后用函数尝试它,但是从不同的目录尝试它,所以它不起作用。

这是可行的,但我觉得我做的不对。我应该以一种不同的方式设置我的路径或功能吗?

不,给出文件的完整路径而不是依赖于工作目录是正确的做法。

::$fish_user_paths只是您设置的一个变量,然后鱼类将注意添加到$PATH中。$PATH是fish和其他工具(包括任何命令fish启动(如果愿意)将使用的实际变量)来查找命令。

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

https://stackoverflow.com/questions/74128836

复制
相关文章

相似问题

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