Как оформить заказ на все измененные файлы? - PullRequest
0 голосов
/ 20 января 2019

Я пытаюсь извлечь все измененные файлы из моего репо:

git status | grep modified | awk '{split($0,a,":"); print a[2]}'

Дает мне имена файлов, т.е. где git status возвращает:

modified:    a.txt
modified:    b.txt

И awkвозвращает (обратите внимание на пробел):

    a.txt
    b.txt

Я пытался заменить print на git checkout:

git status | grep modified | awk '{split($0,a,":"); git checkout a[2]}'

Но это не сработало.

Затем я подумал, что это может быть связано с пробелами, поэтому я удалил их с помощью

git status | grep modified | awk '{split($0,a,":"); gsub(" ","",a[2]); git checkout a[2]}'

, который, когда я увидел с print вместо git checkout, увидел, что имена файлов печатаются без пробелов,как я хотел.

Однако это тоже не сработало и без каких-либо предупреждений.Я подумал, что это может быть связано с тем, что awk не вызывает команду, просто редактирует текст, поэтому я попытался добавить evil раньше, но безрезультатно ...

Как я могу сделатьэто работа?

1 Ответ

0 голосов
/ 20 января 2019

Не могли бы вы попробовать выполнить следующее (я удалил часть grep из вашего кода, поскольку awk сам мог выполнять поиск текста) один раз.Я не смог проверить это, поскольку в моей системе нет git:)

git status | awk '/modified/{split($0,a,":"); print "git checkout " a[2] > ("script.ksh")} END{close("script.ksh");system("chmod 755 script.ksh;./script.ksh")}' 

Объяснение: В awk коде просто создается файл сценария (только для тех строк, которые содержат только строку modified. Имя файла сценария будет script.ksh) с помощью awk, а затем выполняется с предоставлением надлежащих разрешений на выполнение.Мы могли бы видеть man awk для использования system функции awk, которая помогает awk запускать команды уровня BASH в его программе. Еще один пункт close("script.ksh") должен быть СОВЕРШЕН, чтобы избежать ошибок, как OP получил file is busy....etc, так какawk программа все еще работает, поэтому файл будет открыт в бэкэнде, после закрытия мы сможем использовать его для запуска.

РЕДАКТИРОВАТЬ: Над решениемиспользует файл сценария для запуска всех операторов git на тот случай, если вы хотите запустить их без создания файла, а затем попробуйте выполнить следующие действия.

git status | awk '/modified/{split($0,a,":"); print "git checkout " a[2]}' | sh
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...