пока строка чтения не работает на mac с makefile - PullRequest
0 голосов
/ 26 мая 2019

Я должен сделать это, и он все еще не работает (т.е. поместить все в одну строку):

commit:
  cat data/commit-folders.csv | while read line; do git add $line/; git commit $line/ -m 'Autocommit'; git push origin master; done
.PHONY: commit

По какой-то причине $line отображается как ine, а я пробовал $(line) и до сих пор не пошел. Я бы тоже хотел поставить это в несколько строк, но пока не понял.

commit:
  cat data/commit-folders.csv | while read line \ 
    do
      -git add $line
      -git commit $line/ -m 'Autocommit'
      -git push origin master
    done

- on -git предназначен для Makefile, чтобы игнорировать ошибки команды. Я хотел бы сохранить такое поведение в этой ситуации, если это возможно.

Обычно я пытаюсь прочитать CSV-файл, в котором просто есть путь на строку (папка, такая как foo/bar/baz), и я хочу зафиксировать foo/bar/baz/ с помощью косой черты.

1 Ответ

2 голосов
/ 26 мая 2019

По какой-то причине $ line отображается как ine, и я пробовал $ (line)

$ расширяется первым. Таким образом, $line читается как ${l}ine, а ${l} не определено в make-файле, что приводит к ine.

Также ${line} расширяется до нуля, так как в вашем случае это должна быть переменная оболочки, а не make.

Таким образом, правильное решение - $$line, которое сначала (по make) расширяется до $line, а затем (по оболочке) до правильного значения.

Я бы тоже хотел поместить это в несколько строк, но пока не понял.

С GNU make вы можете использовать .ONESHELL:

.ONESHELL:
commit:
    cat data/commit-folders.csv | while read line \ 
    do
        git add $$line
        git commit $$line/ -m 'Autocommit'
        git push origin master
    done
    exit 0

- on -git предназначен для Makefile, чтобы игнорировать ошибки команды

Это необходимо, когда вы не используете .ONESHELL. С .ONESHELL это в основном работает так, как будто вы выполняете файл сценария оболочки.

...