2017-02-15 27 views
1

Я хочу иметь сборщик git для скрипта оболочки и столкнулся с проблемой с экранированием кавычек при передаче списка в диалог с xargs. Может быть, кто-то может помочь мне найти и исправить проблему? Я использую следующую команду, чтобы создать диалоговое окно:Git branch picker with dialog: escaping quotes

git for-each-ref --sort=-committerdate refs/heads/ --format='"%(refname:short)" "%(authorname): %(contents:subject) (%(committerdate:relative))"'|xargs -p -d'\n' dialog --menu \"Select a branch\" 0 0 0 

я получаю Error: Expected 2 arguments, found only 1. вместо диалога.

+0

Отсутствует место здесь? '-d '\ n'' –

+0

Я считаю, что это необязательно. –

+0

Какая часть повышает эту ошибку? – smarber

ответ

0

Вы, вероятно, обманываетесь ссылкой xargs. я могу заставить его работать с GNU Parallel:

git for-each-ref --sort=-committerdate refs --format='%(refname:short) 
%(authorname): %(contents:subject) (%(committerdate:relative))' | parallel -r --tty -Xj1 dialog --menu \"Select a branch\" 0 0 0 

Да, является новой строки после 'короткого).

+0

Я видел, что некоторые используют параллель вместо xargs, но, на мой взгляд, ее цель отличается от того, что я пытаюсь достичь. В моем случае я просто хочу передать кучу строк в качестве параметров в диалог, который должен делать xargs. –

+0

@ ska-uk Как вы упомянули в своем комментарии, ваша проблема может быть вызвана тем, что символы, которые должны быть экранированы для 'xargs', поступают правильно. GNU Parallel по умолчанию задает все, поэтому его следует легче прогнозировать и дать вам меньше неожиданных сюрпризов. Во всяком случае, я попытался заставить его работать с 'xargs' и не удалось. Оба будут терпеть неудачу, если у вас есть много вариантов, так как вы можете поразить максимальную длину строки для команды оболочки. –