Fish Shell 从命令替换中返回状态代码

Fish Shell returning status code from within command substitution

我有一个像这样工作的小辅助函数:

function select_item
  set -e selected_item
  set -g selected_item (for i in $argv; echo $i; end | fzf)
end

此函数随后在其他地方用于启动编辑器或其他任何东西。

我想做的是,如果我在 fzf 中按下转义键,则中止所有操作,并将错误状态代码(来自 fzf)传递给调用客户端功能,所以他们也可以中止。但是,我认为从函数 select_item 返回的状态代码来自最终 set 命令的成功或失败,而不是来自 fzf.[=18= 的最后一个操作。 ]

有没有一种干净的方法来获取 fzf 的状态代码,同时保留这个基于管道的漂亮代码结构?

$status 将包含 fzf 未设置的状态:

$ set output (date; false)
$ printf "%s\n" $status $output
1
Tue Aug  4 18:43:22 EDT 2020

您可以使用 printf 代替 for 循环来添加换行符:

function select_item
  set -e selected_item
  set -g selected_item (printf "%s\n" $argv | fzf)
  return $status
end