Скрипт оболочки работает нормально сам по себе, но выдает неожиданные результаты при запуске через git filter-branch - PullRequest
1 голос
/ 06 февраля 2012

Вот скрипт, который я хочу запустить, используя git filter-branch:

#!/bin/bash
if test -e src/unlagged.cpp; then
    more +34 src/unlagged.cpp | cat ~/newlic.cpp.txt - > /tmp/unlagged.cpp
    cp /tmp/unlagged.cpp src/unlagged.cpp
fi
if test -e src/unlagged.h; then
    more +34 src/unlagged.h | cat ~/newlic.h.txt - > /tmp/unlagged.h
    cp /tmp/unlagged.h src/unlagged.h
fi

Довольно просто.Он берет все после первых 34 строк src/unlagged.cpp и src/unlagged.h, объединяет его с содержимым текстового файла, затем записывает его во временный файл, который затем копируется поверх файла, который я хотел изменить.Это прекрасно работает, пока я просто запускаю его в своем исходном дереве, так как вывод src/unlagged.cpp выглядит так:

(newlic.cpp.txt)
(everything passed line 34 of src/unlagged.cpp)

Однако, когда я запускаю git filter-branch '/path/to/script.sh' -- --all, файлы изменяются таким образом...

(newlic.cpp.txt)
::::::::::::::
src/unlagged.cpp
::::::::::::::
(entire src/unlagged.cpp)

Откуда взялись эти двоеточия и название файла?Почему он на самом деле не обрезается src/unlagged.cpp?Я попробовал скрипт с #!/bin/sh и получил тот же результат.Кстати, я использую git 1.7.7.3.

1 Ответ

2 голосов
/ 06 февраля 2012

Используйте tail -n +34 вместо more +34. Вам мешает интерактивная природа большего. Например, запустите more +34 src/unlagged.cpp < /dev/null, и вы увидите строки ::::::::::.

...