Понятия не имею, как это исправить. Я написал простой скрипт bash, который записывает текущую дату и время в файл и помещает его в ловушку post-commit и pre-commit. Когда я запускаю это локально, например. ./pre-commit ./post-commit это работает, но когда я фиксирую свой svn, ничего не происходит. Может я что-то упустил в конфигурации? Пожалуйста, помогите мне ... Вот сценарий, чтобы вы знали, о чем он:
filename="datefile"
echo "writing file ${filename}..."
echo "Commited..." > ${filename}
date | cut -d"," -f2 >> ${filename}
date | cut -d" " -f5 >> ${filename}
echo "Done!"
Спасибо за любую помощь.
пс. Это не проблема с перми, я уже дал правильные оба, файлы сценариев и дата-файл.
Во-первых, вам не хватает линии Шебанга; первая строка должна читаться как #!/usr/bin/env bash
или #!/bin/bash
Во-вторых, вы делаете предположения о том, каким будет текущий рабочий каталог при запуске ловушки, поэтому, если ему удастся запустить скрипт, даже если он пропуская важную строку Шебанга, она, вероятно, работает, но записывает datefile
в другой каталог, чем вы предполагали. Укажите абсолютный путь к файлу, в который вы хотите записать.
Наконец, ${filename}
- плохая практика, вы всегда должны заключать в кавычки расширения переменных, чтобы избежать разбиения слов и расширения пути: "$filename"
. Кроме того, вместо выполнения date | cut ...
просто скажите дату, чтобы выводить только те биты, которые вы ищете. Э.Г.
printf 'Commit happened at %s\n' "$(date "+%Y-%m-%d %H:%M:%S")" > "$filename"
В дополнение к этому, bash printf (начиная с 4.0) также может выводить строки даты.
printf 'Commit happened at %(%Y-%m-%d %H:%M:%S)T\n' -1 > "$filename"
man bash | less +/printf
чтобы узнать больше о printf.