运行鱼财shell函数

Running fortune from fish shell function

我正在尝试编写一个函数 quickgit,它可以自动添加、提交和推送,并具有来自 fortune 的提交消息的额外好处。我有以下脚本:

function quickgit
    git add --all
    git commit -m (fortune)
    git push
end

除了提交消息是 "(fortune)" 而不是来自 fortune 的消息外,它是有效的。如何确保 fortune 是 运行 并在我的 fish 函数中展开?

fish 在获得恰到好处的引用方面存在很多问题,我会避免在脚本中完全使用它。 (参见 https://github.com/fish-shell/fish-shell/issues/159

我无法重现你的确切问题,但 运行 到我自己的关于多线命运的问题。 (参见引用的错误)

也就是说,对于您的用例,您可以完全避免它:

function quickgit
    git add --all
    fortune | git commit -F -
    git push
end

默认情况下,命令替换在换行符边界上拆分命令的输出。因此,多行算命会将多个参数传递给 git commit -m。这意味着只有第一行将由 -m 选项处理,第二行到第 n 行最终将被视为文件名。尝试将 set -l IFS 添加到您的函数中以禁止该拆分。另一种方法是在 var 中捕获输出然后插入 var:

set -l fortune (/usr/games/fortune) git commit -m "$fortune"

但请注意,每个换行符都会替换为 space。