【问题标题】:Using fish shell function within a script在脚本中使用 fish shell 函数
【发布时间】:2016-04-13 09:37:39
【问题描述】:

我有一堆 shell 脚本,第一个是安装流行的 Fish shell 的。完成此步骤后,我将functions/ 目录复制到适当的位置。然后我想使用spin 函数来调用每个shell 脚本并在每个脚本执行时显示一个微调器。但是,在我通过 Fish 的初始安装和配置后,我无法使用这些功能,即 spin <command> 导致 command not found

注意这发生在一个临时的 docker 容器中进行测试。

对此的任何指示或帮助,将不胜感激。

【问题讨论】:

  • 不熟悉fish,但通常情况下,shell 函数在非交互式 shell 中不可用。一个简单直接的解决方法是将实现从函数更改为常规外部命令。
  • @tripleee 函数在非交互式 shell 中可用,但定义它们的文件可能不会被这些 shell 加载。另一方面,别名在非交互式 shell 中通常不可用。
  • 对于鱼来说,这实际上应该有效,因为它总是获取相同的文件。除非您使用if status --is-interactive 明确保护它。是你的$fish_function_path 中的函数目录吗?
  • 为了调试,它是并且没有任何防护措施。这是一种不寻常的情况。

标签: linux shell docker debian fish


【解决方案1】:

如果你想从外部fish运行fish函数,使用fish -c和一个fish命令行作为一个字符串。

例如,这会失败...

env __fish_pwd

...但这有效:

env fish -c __fish_pwd

这是因为env 运行的是可执行文件,而不是鱼函数。我假设spin 也是这样的。

【讨论】:

  • 感谢您,它似乎适用于除来自 Fisherman 插件管理器的 spin 之外的所有内容,也许那里存在问题。使用您描述的技术,bash 确实可以使用该目录中的函数。感谢那。 env 运行可执行文件的任何信息或资源?我在脚本中看到了很多 #!/usr/bin/env <int>,我想这就是原因。
猜你喜欢
  • 2011-03-21
  • 1970-01-01
  • 1970-01-01
  • 2018-11-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多