2016-10-18 3 views
0

Я пытаюсь запустить эту командную строку в Fish.Как я могу заставить эту оболочку bash работать в Fish?

git show $(git log --pretty=oneline | fzf | cut -d ' ' -f1)

Что должно произойти, это git log --pretty=oneline | fzf | cut -d ' ' -f1 позволяет выбрать фиксацию в интерактивном режиме из git log, а затем возвращает фиксации хэш, который передается в git show.

Я думал, что рыба использует круглые скобки для «подкоманд», но это не работает.

git show (git log --pretty=oneline | fzf | cut -d ' ' -f1)

Он идет прямо к выходу по умолчанию git show, который является главой фиксации.

Я подозреваю, что моя идея о том, как работает оболочка, неверна. Любая помощь оценивается.

UPDATE

Это выход из трубопровода

$ git log --pretty=oneline | fzf | cut -d ' ' -f1 3eb7a8fa09ac94cf4a76109b896f7ba58959f5a8

UPDATE 2

Как ответил @faho, это ошибка в Рыбе.

Вы можете обойти сейчас, используя временный файл

git log --pretty=oneline | fzf | cut -d ' ' -f1 > $TMPDIR/fzf.result; and git show (cat $TMPDIR/fzf.result)

Или, более сжато, используя xargs

git log --pretty=oneline | fzf | cut -d ' ' -f1 | xargs -o git show

+0

ли этот трубопровод возвращает более одной строки вывода? –

+0

Он вызывает 'fzf', который вы выбираете из списка с помощью клавиши ввода, и возвращает один хэш. Я обновил вопрос. – jordelver

+0

этот синтаксис выглядит правильно. Попробуйте 'set lines (git log ...); echo (count $ lines); git показать $ lines' –

ответ

2

Это проблема рыбы #1362, который также упоминается в fzf's readme.

Там есть простое решение: вместо подстановки команд, используйте read, как

git log --pretty=oneline | fzf | cut -d ' ' -f 1 | read -l answer 
git show $answer 

(fzf в настоящее время использует временный файл в рыбных привязках, но я работаю над исправлением этого)

+0

Большое спасибо. В этом есть смысл. Я могу обходиться сейчас. Надеюсь, что ошибка будет исправлена ​​один день :) – jordelver

Смежные вопросы