Итак, я пытаюсь очистить имеющийся у меня скрипт, который получает список промежуточных файлов, используя git status
, чтобы вернуть относительный путь к файлу каждого подготовленного файла. Я посмотрел документацию по git status
, чтобы узнать, есть ли способ заставить его возвращать путь абсолютный каждого промежуточного файла, но, похоже, для этого нет возможности, и git ls files
или git diff
будут работать для этого, так как конкретный вариант использования во время слияния.
Во время слияния использование git diff
ничего не возвращает, в то время как git status
показывает все подготовленные файлы, поэтому я застрял с использованием git status
.
Из этого списка я хочу затем grep
просмотреть список файлов, чтобы извлечь любые строки, содержащие строку "Path: "
, и вывести ее. По сути, у меня есть список поэтапных файлов .yml, и я хочу извлечь все изменения свойства Path
в этих ymls. Вот что у меня так далеко:
IFS=$'\n'
for file in `git status -s -uno | sed s/^..//`
do
relativePath=$(echo $file | sed 's/^[ \t]*//;s/[ \t]*$//' | tr -d '"')
startPath=`pwd`
grep "Path: " "$startPath/$relativePath"
done
unset IFS
Пояснение:
git status -s -uno | sed s/^..//
- Я передаю результат
git status
в sed
, чтобы удалить лишние пробелы
relativePath=$(echo $file | sed 's/^[ \t]*//;s/[ \t]*$//' | tr -d '"')
- Я отображаю путь к файлу и направляю его в
sed
, чтобы удалить лишние пробелы, которые не были удалены из начального вызова sed
в начале цикла for
. Затем я направляю это в tr
, чтобы удалить первые и последние двойные кавычки из строки, поскольку мне нужно объединить этот относительный путь с моим начальным путем, чтобы получить полный путь.
startPath=`pwd`
grep "Path: " "$startPath/$relativePath"
- Сохраните текущий рабочий каталог в переменной, затем объедините его с нашим относительным путем и передайте его в
grep
Этот скрипт работает и извлекает данные, которые мне нужны, но я чувствую, что есть гораздо более чистый способ сделать это. Есть ли способ заставить git status
возвращать полный путь каждого промежуточного файла, чтобы мне не нужно было иметь вторую переменную $startPath
, которую я объединяю с моими $relativePath
, которые передаются в grep
?