Я действительно новичок в bash сценариях и пытаюсь написать bash сценарий для использования с перехватчиками subversion.
Цель состоит в том, чтобы получить список java проектов, которые были добавлены, а затем записать этот список в файл (чтобы я мог создать из него журнал изменений и отобразить его внутри приложения) вместе с другой информацией, собранной с помощью svnlook, которую я уже разработал.
С момента подрывной деятельности сам по себе не особо заботится о проектах, которые я фиксирую в eclipse, и вместо этого работает с каталогами, я должен использовать команду «svnlook change», которая выкладывает каждый файл с полным путем, который был включен в коммит.
Вот пример того, что возвращает «svnlook Change»:
U Project/branches/11.4.11.001/LIB1/com/some/other/directory/some_java_class.java
U Project/branches/11.4.11.001/LIB2/com/some/other/directory/another_thingy.java
U Project/branches/11.4.11.001/new/directories/LIB1/com/something/some_java_class.java
U Project/branches/11.4.11.001/PRJ1/com/directory/some_java_class.java
Теперь я не могу гарантировать, что эта структура каталогов всегда будет одинаковой, поэтому я хочу найти java Имена проектов путем фильтрации «PRJ» и «LIB», так как они всегда начинаются с этих букв, и я могу быть уверен, что это не изменится.
Итак Что я пытаюсь сделать в сценарии:
Шаг 1: Поместите вывод "svnlook change" в файл:
tempfile=/data/svn/scratch.txt
input=/data/svn/scratch2.txt
touch $tempfile
touch $input
$SVNLOOK changed -r "$REVISION" "$REPOS" >> $input
Это работает.
Шаг 2: переберите каждую строку файла, найдите подстроку, которая представляет проект, ища «LIB» или «PRJ» в пути. Запишите это в файл. На данный момент я просто предполагаю, что существует не более 9 дочерних каталогов, и я перебираю путь по 10 раз, чтобы посмотреть каждый из них:
for i in {1..10}
do
cat $input | cut -d "/" -f $i | grep -i -s -e PRJ -e LIB | tr [:lower:]äöü [:upper:]ÄÖÜ >> $tempfile
done
Это не работает в сценарии. Файл в /data/svn/scratch.txt всегда пуст. Когда я запускаю команду из командной строки и заменяю $ input и $ i, она работает, и все следующие команды также работают.
Шаг 3. Установите все остальные переменные. Я перебираю временный файл, отфильтровывая дубликаты и помещая запятые для их разделения:
DATE=$(date '+%d-%m-%Y')
REVISION=$($SVNLOOK youngest "$REPOS")
CHANGEDPRJ=$(cat $tempfile | sort -u | xargs | sed -e 's/ /, /g')
COMMENT=$($SVNLOOK log -t "$TXN" "$REPOS")
Шаг 4. Выведите эту переменную вместе с другими вещами в файл, в котором я хотел бы сохранить все:
echo "$DATE" , "$REVISION" , "$CHANGEDPRJ" , "$COMMENT" >> /data/svn/commit.log
Итак, сейчас я получаю:
17-02-2020, 571,, Очистка устаревших комментариев
Вместо:
17-02-2020, 571, LIB1, LIB2, PRJ1, Очистка устаревших комментариев
Я почти уверен, что есть очень очевидное и простое решение, чтобы заставить это работать, но я bash сценарий в первый раз сегодня, и я не могу найти в Google правильную информацию, чтобы узнать, что я делаю неправильно ... Если бы кто-то мог указать мне правильное направление, это было бы удивительно!