我不知道如何修复它。我写了一个简单的 bash 脚本,将当前日期和时间写入文件,并将其放入提交后和提交前挂钩。当我在本地运行它时,例如输入 ./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!"
谢谢你的帮助。
ps. 这不是权限问题,我已经为脚本文件和日期文件提供了正确的权限。
答案1
首先,你错过了shebang行;第一行应该是#!/usr/bin/env bash
或#!/bin/bash
其次,您假设了钩子运行时的当前工作目录,因此如果它设法运行脚本,即使它缺少重要的 shebang 行,它也可能有效,但写入的目录datefile
与您假设的目录不同。提供要写入的文件的绝对路径。
最后,${filename}
这是不好的做法,您应该始终引用变量扩展以避免单词拆分和路径名扩展:"$filename"
。此外,不要执行date | cut ...
,而只需告诉 date 仅输出您想要的位。例如
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 的更多信息。