Как использовать трубу для отправки параметров - PullRequest
0 голосов
/ 29 ноября 2018

Я не могу отправить выходные данные одной команды в качестве параметров второй команды:

git diff --name-only HEAD | prettier --write

Я хочу отправить prettier все измененные файлы, но я получаю следующую ошибку:

Нет парсера и путь к файлу не задан, не могу вывести парсер.


Когда я пытаюсь сделать это вручную на одной строке из выходных данныхПервая команда, она работает как положено:

 prettier --write --write path-of-the-file/file1.bla

Где моя ошибка?

1 Ответ

0 голосов
/ 29 ноября 2018

Ошибка может быть вызвана тем, что команда передается по каналу, т.е. prettier не читает со стандартного ввода, а только при передаче в качестве позиционных аргументов (prettier <input-args>).Как правило, когда команды передаются по конвейеру, стандартный вывод первой команды подключается к стандартному вводу следующей после нее.

Использование xargs как раз предназначено для этого.Передайте результат, полученный от предыдущей команды, и передайте его с легкостью.Он должен работать как на FreeBSD, так и на системах на основе GNU.

git diff --name-only HEAD | xargs -I {} prettier --write "{}"

Или, если ваша оболочка довольно новая, и если она поддерживает подстановку процессов, вы можете запустить команду prettier для каждой строки выводаgit diff как

while IFS= read -r op; do
    prettier --write "$op"
done< <(git diff --name-only HEAD)
...