Fi sh Shell возвращает код состояния из подстановки команд - PullRequest
1 голос
/ 04 августа 2020

У меня есть небольшая вспомогательная функция, которая работает следующим образом:

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

Эта функция затем используется в другом месте для запуска редакторов или чего-то еще.

Что я хотел бы иметь Чтобы сделать, это прервать все, если я нажму escape в fzf и передам код состояния ошибки (из fzf) вызывающим клиентским функциям, чтобы они также могли прервать работу. Но я думаю, что код состояния, возвращаемый функцией select_item, является результатом успеха или неудачи последней команды set, а не последней операции, введенной в нее из fzf.

Есть ли чистый способ получить код состояния fzf, сохранив при этом эту красивую структуру кода на основе конвейера?

1 Ответ

2 голосов
/ 05 августа 2020

$ status будет содержать статус fzf not set:

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

Вы можете использовать printf вместо этого для l oop, чтобы добавить новые строки:

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