PowerShell Core не очень хорошо играет с jq - PullRequest
0 голосов
/ 07 января 2020

Я пытаюсь получить все ветки из репозитория git и сохранить их в PSObject. Мой код работает в zsh и bash, но не в PowerShell Core. Просматривая документацию по PowerShell ( Правила цитирования и Специальные символы ), я не вижу ничего, что мне нужно было бы скрыть. Поскольку строка работает в zsh и bash, я не думаю, что проблема в jq.

Часть команды, которая не работает:

jq --raw-input --slurp 'split("\n") | map(split("\t")) | .[0:-1]'

Ошибка:

jq: error: syntax error, unexpected INVALID_CHARACTER (Unix shell quoting issues?) at <top-level>, line 1:
split(\n) | map(split(\t)) | .[0:-1]
jq: 1 compile error

Я использую всю команду (в bash замените `новые строки на \):

git for-each-ref --sort='-authordate:iso8601' `
    refs/heads `
    --format='%(refname:short)%09%(creatordate:rfc)%09%(creator)%09%(committerdate:rfc)%09%(committeremail)' `
    | jq --raw-input --slurp 'split("\n") 
      | map(split("\t")) 
      | .[0:-1] 
      | map( {
        "branchName": .[0], 
        "AuthorDate": .[1], 
        "Author": .[2], 
        "CommitDate": .[3], 
        "Committer": .[4]
      })'

My Версия PowerShell Core: 6.2.1 Я работаю с Ma c с iTerm2. Я вызываю PowerShell через pwsh.

1 Ответ

1 голос
/ 07 января 2020

Согласно сообщению об ошибке, двойные кавычки удаляются. Таким образом,

split("\n") | map(split("\t")) | .[0:-1]

становится

split(\n) | map(split(\t)) | .[0:-1]

Редактировать: согласно комментарию, в этом случае двойная кавычка работает. Экранирование обратным тэгом не используется:

split(""\n"") | map(split(""\t"")) | .[0:-1]

Обычно стоит попробовать экранирующий символ Powershell, backtick `, для экранирования двойных кавычек, например,

split(`"\n`")

(чего не происходит работать в этом конкретном случае. Экранирование может быть сложно.)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...